在我的上一个问题(Ruby on Rails: Relation between two models)之后,我遇到了一些新问题:
我正在使用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 %>
为此我在requests_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
答案 0 :(得分:0)
确保在渲染视图之前调用方法correct_user
。在第二个注释中,确保request
对象与user
关联。(即,@ request.user不应为nil)
此外,您在下面一行比较登录用户和所有者的方式是错误的
<% if current_user && @request.user == current_user %>
它应该是这样的
<% if current_user && @request.user.id == current_user.id %>
如果比较对象,它们将不会相同。请比较id