我在我的用户表中添加了一个admin boolean列,并将我的用户切换为yes。我更改了以下代码,以便“编辑”按钮显示所有引脚的管理员:
<% if current_user == pin.user || current_user.admin? %>
<p>
<%= link_to 'Edit', edit_pin_path(pin) %>
<%= link_to content_tag(:i, "", class:"icon-trash"), pin, method: :delete, data: { confirm: 'Are you sure?' } %>
</p>
<% end %>
当我尝试编辑一个引脚时,我收到一个错误:找不到带有id = 37-outer [WHERE“pins”的Pin。“user_id”= 1] 我相信这是因为引脚控制器,但我还没弄清楚如何正确更改它以允许管理员编辑。这是我的控制器:
def edit
@pin = current_user.pins.find(params[:id])
端
我有一种感觉,这是一个简单的解决方案,我只是缺少。
答案 0 :(得分:0)
你正在确定current_user
的引脚,这就是你收到错误的原因。尝试将找到引脚的代码更改为
klass = Pin
klass = klass.where(user_id: current_user.id) unless current_user.admin?
@pin = klass.find(params[:id])
或者,如果这是你将在很多地方使用的东西,那么定义一个类方法可能是好的
# app/models/pin.rb
def self.find_for_user(pin_id, user)
user.admin? ? find(pin_id) : user.pins.find(pin_id)
end
# in your controller
@pin = Pin.find_for_user(params[:id], current_user)