0

我的 Rails 3.2 项目有一个设计生成的用户和一组模型,这些模型都包含特定于该用户的数据。我希望登录用户能够通过控制器公开的 API 仅访问他自己的数据。

现在,启用此功能的一种蛮力方法是更改​​每个控制器,例如:

def index
  @stuff = Stuff.all

def index
  @stuff = Stuff.find_all_by_user_id current_user.id

我必须对每个控制器的每一个动作重复这一点。是否有更简洁和干燥的方式来实现相同的效果?我必须写的样板数量感觉不对。

谢谢!

4

2 回答 2

1

看看CanCan宝石。

于 2012-05-29T21:54:31.713 回答
0

a)您可以在 application_controller.rb 中有一个 before 回调,看起来像

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)或者您可以在东西 model.rb中使用范围界定,您可以在其中说:

scope :stuff_from_current_user, where(:user => current_user)
于 2012-05-29T22:16:08.957 回答