My Rails 3.2项目有一个设计生成的用户和一组模型,这些模型都包含特定于该用户的数据。我希望登录用户只能通过控制器公开的API访问自己的数据。
现在,实现这一目标的一种蛮力方式是将每个控制器改为:
def index
@stuff = Stuff.all
到
def index
@stuff = Stuff.find_all_by_user_id current_user.id
我必须为每个控制器的每个动作重复此操作。是否有更简洁和干燥的方式来达到同样的效果?我必须写的样板量感觉不对。
谢谢!
答案 0 :(得分:1)
看一下CanCan gem。
答案 1 :(得分:0)
a)你可以在application_controller.rb 中回调之前的看起来像
def find_stuff_from_current_user
@stuff = Stuff.find_all_by_user_id current_user.id
end
而不是像这样在每个控制器中调用它:
before_filter :find_stuff_from_current_user
现在每个控制器和每个操作都有@stuff变量。
b)或者你可以在材料模型中使用范围.rb ,你可以这样说:
scope :stuff_from_current_user, where(:user => current_user)