允许管理员编辑其他用户的引脚 - Rails

时间:2013-11-27 02:41:17

标签: ruby-on-rails

我在我的用户表中添加了一个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])

我有一种感觉,这是一个简单的解决方案,我只是缺少。

1 个答案:

答案 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)