【发布时间】:2015-10-10 21:30:37
【问题描述】:
在我上一个问题 (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
【问题讨论】:
-
你能展示你的模型吗?您的用户模型与请求模型的关系如何?
-
@Gerep thx 提示。完成!
-
你说你已经创建了方法
correct_user但是我看不到你在哪里调用它,你能添加你的请求控制器吗? -
@Gerep 抱歉回复晚了(生病了)。我编辑了我的 request_controller.rb 的相关部分。
标签: ruby-on-rails devise