在Rails 3中的before_filter方法中传递控制器方法属性

时间:2011-02-08 03:24:02

标签: ruby-on-rails-3 controller before-filter

我试图只允许有权查看它们的用户访问图库。通过权限,图库有许多shared_users,反之亦然。画廊也只有一个所有者。所有者和共享用户都是User类。一切正常。但是,我遇到的问题是我的访问过滤器。

我正在使用以下代码查看是否允许用户查看他们尝试访问的图库:

def authenticate_viewers!
  if user_signed_in? && current_user.can_view?(@gallery)
    return true
  end
  redirect_to root_url,
    :notice => "You must have permission to view this gallery."
  return false    
end

正如您所看到的,can_view?需要我在@gallery方法中设置的show,但before_filter不允许您访问属性在方法中设置,因为它在方法执行之前解析。使用after_filter作品,只要未经授权的用户不尝试查看图库。如果是这样,我会收到DoubleRender错误,因为after_filter允许页面呈现,然后尝试重定向。

我只是认为我可以使用params [:id]而不是@gallery,虽然我还没有尝试过,最终这可能更有效(传递一个整数而不是一个对象)。无论如何,有没有办法让我当前的代码工作?或者切换到使用params(如果它甚至可以工作)符合我的最佳利益?

1 个答案:

答案 0 :(得分:0)

哇,好的。开始在SO上写问题真的很有帮助,因为正如我一样,我通常会有一个如何解决问题的头脑风暴。我只使用Gallery.find(params[:id])而不是使用@gallery对象,一切都像魅力一样。感谢上帝,我不必重写所有代码。