我有一个与群组关联的用户模型。关系如下:
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组。
如何实现这一目标?
答案 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。