[英]Ruby on Rails: User_id and category_id is nil
接下來是我的最后一個問題( Ruby on Rails:兩個模型之間的關系 ),我遇到了一些新問題:
我正在使用Devise,您可以在其中輸入電子郵件旁邊的用戶名,等等。 這有效,並且名稱被保存到數據庫。
現在,我試圖在特定的“顯示”頁面上調用該用戶名,以說明誰創建了請求:
<%= @request.user.name if @request.user %>
此外,我只希望創建請求的特定用戶能夠刪除和編輯:
<% if current_user && @request.user == current_user %>
<%= link_to edit_request_path(@request), class: "btn btn-default" do %>
<span class="glyphicon glyphicon-edit"></span>
Edit
<% end %>
<%= link_to @request, method: :delete, data: { confirm: 'Bist du sicher?' }, class: "btn btn-default" do %>
<span class="glyphicon glyphicon-trash"></span>
Löschen
<% end %>
<% end %>
為此,我在我的request_controller.rb中設置了一個類:
def correct_user
@request = current_user.requests.find_by(id: params[:id])
redirect_to requests_path, alert: 'Keine Berechtigung bearbeiten' if @request.nil?
end
但是,既不會顯示用戶名,也不會顯示刪除和編輯按鈕:(
這是request.rb:
class Request < ActiveRecord::Base
belongs_to :category
belongs_to :user
validates :description, presence: true, length: { maximum: 500 }
validates :title, presence: true
validates :budget, presence: true
validates :category, presence: true
end
和user.rb:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :requests
validates :name, presence: true
end
我進行了此遷移,以將UserID添加到Requests模型,以便可以通過@ request.user.name調用用戶:
class AddUserIdToRequests < ActiveRecord::Migration
def change
add_column :requests, :user_id, :integer
end
end
我的request_controller.rb的摘錄:
class RequestsController < ApplicationController
before_action :correct_user, only: [:edit, :update, :destroy]
private
def set_request
@request = Request.find(params[:id])
end
def correct_user
@request = current_user.requests.find_by(id: params[:id])
redirect_to requests_path, alert: 'Keine Berechtigung bearbeiten' if @request.nil?
end
def request_params
params.require(:request).permit(:title, :description, :tags, :budget, :name)
end
在渲染視圖之前,請確保調用了correct_user
方法。 第二點,請確保request
對象具有與之關聯的user
。(即,@ request.user不應為nil)
另外,在下面的行中,您比較登錄用戶和所有者的方式是錯誤的
<% if current_user && @request.user == current_user %>
應該是這樣的
<% if current_user && @request.user.id == current_user.id %>
如果您比較對象,它們將不會相同。 請比較id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.