我有两个模型,用户和组。我还有一个加入表groups_users。 我在群组模型中有一个关联:
has_many :groups_users
has_many :users, :through=> :groups_users
我想添加pending_users,它们与用户关联相同但包含一些条件。我希望将其设置为关联,以便在sql调用中处理所有条件。我知道有一种方法可以为同一个模型提供多个访问器,即使名称与表名实际上没有关系。是class_name吗?
感谢任何帮助,谢谢
答案 0 :(得分:2)
named_scope
s,他们是你的朋友您是否尝试在named_scope
型号上使用Group
?
因为在您确实需要数据之前,所有内容实际上都是代理, 如果你这样做,你最终会得到一个查询:
class User < ActiveRecord::Base
named_scope :pending, :conditions => { :status => 'pending' }
然后:
a_group.users.pending
我使用现有的应用程序运行以下代码:
Feature.find(6).comments.published
导致此查询(忽略第一个获取要素6的查询):
SELECT *
FROM `comments`
WHERE (`comments`.feature_id = 6)
AND ((`comments`.`status` = 'published') AND (`comments`.feature_id = 6))
ORDER BY created_at
以下是相关的型号代码:
class Feature < ActiveRecord::Base
has_many :comments
class Comment < ActiveRecord::Base
belongs_to :feature
named_scope :published, :conditions => { :status => 'published' }
答案 1 :(得分:1)
这应该非常接近 - 更多关于has_many。
has_many :pending_users,
:through => :groups_users,
:source => :users,
:conditions => {:pending => true}
:pending可能被称为其他东西 - 但是您确定了待处理用户。作为旁注 - 通常当您看到用户/组模型时,该关联称为成员资格。
答案 2 :(得分:0)
在用户模型中:
named_scope :pending, :include => :groups_users, :conditions => ["group_users.pending = ?", true]
如果你在连接表group_users中有一个名为“pending”的bool列,那就是这样。
编辑: 顺便说一句,你可以这样做:
Group.find(id).users.pending(:conditions => ["insert_sql_where_clause", arguments])