如何在模型中调用控制器方法

时间:2013-01-11 15:04:15

标签: ruby-on-rails ruby-on-rails-3 rails-activerecord

我有一个与群组关联的用户模型。关系如下:

class User < ActiveRecord:;Base
  has_many :groups
end
class Group < ActiveRecord::Base
  belongs_to :user
  scope :user_groups, lambda { where(arel_table(:user_id).eq(@current_user.id) }
end

class ApplicationController < ActionController::Base
  def current_user
    @current_user ||= User.find(session['entity.user']) if session['entity.user']
  end
end

我想在组索引页面的select_tag中过滤current_user组。

如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

您不应该在模型中访问此数据(它违反了MVC)。最好将它作为参数传递给范围:

scope :user_groups, 
           lambda { |user| where(arel_table(:user_id).eq(user.try(:id) || user) }

并称之为:

User.user_groups(@current_user) # or you can pass @current_user.id, still works

注意:您可以将id(整数)或用户对象传递给user_groups lambda。

答案 1 :(得分:0)

有时您可能需要检查模型中的current_user。所以在当前用户方法集中如下:

 ActiveRecord::Base.current_user = @current_user

这将有助于检查您将来定义的任何模型中的current_user。