嵌套资源 - 也可以通过current_user过滤控制器

时间:2012-11-06 18:35:01

标签: ruby-on-rails

感谢另一个问题的一些帮助,我现在有一个嵌套的资源设置,它几乎按照我需要的方式工作。这是关于控制器的后续问题。

费用包括用户和他们所属的项目。

我想访问/ projects / 5 / expenses,并查看该项目的所有费用列表(其中有效),但也对当前登录的用户敏感,因此它们只是看看自己的开支。

首先是模特:

class Expense < ActiveRecord::Base
  attr_accessible :amount, :project_id, :user_id

  belongs_to :project
  belongs_to :user

end

其他每个模型都有“has_many:expenses”,以完成关系。

所以我的路线如下:

  resources :projects do
    resources :expenses
  end

class ExpensesController < ApplicationController

    def index
      @user = current_user  
      @project = Project.find(params[:project_id])
      @expense_list = @project.expenses.all  
end

如何通过仅显示current_user的费用来进一步过滤我的@expense_list?

1 个答案:

答案 0 :(得分:2)

您需要一个附加条件来根据用户所属的用户查询费用。 我建议你在费用模型中创建一个范围

scope :for_user, lambda{ |user| 
      where( :user_id => user.id )
   }

你可以在控制器中执行此操作:

@expense_list = @project.expenses.for_user(current_user).all