我有以下型号:
class Epic < ActiveRecord::Base
has_many :planograms
has_and_belongs_to_many :users
end
class Planogram < ActiveRecord::Base
belongs_to :epic
end
class User < ActiveRecord::Base
has_and_belongs_to_many :epics
end
还有一个epics_users
表。
我无法弄清楚如何编写ActiveRecord查询以获取特定用户的所有Planograms。我尝试了以下方法:
Planogram.joins(:epic).where(:epics_users => {:user_id => 1})
以及许多其他组合,但我在ActiveRecord查询中没有经验。
答案 0 :(得分:2)
您可以将用户和计划图关联起来:
class User < ActiveRecord::Base
has_and_belongs_to_many :epics
has_many :planograms, :through => :epics
end
获取特定用户的计划图:
user.planograms
答案 1 :(得分:1)
在这种情况下,与User的关系是通过Epic。你可以试试这个:
Planogram.joins(epic: :users).where(:epics_users => {:user_id => 1})
您可以在此处阅读ActiveRecord联接方法的更多内容:http://guides.rubyonrails.org/active_record_querying.html#joining-tables
答案 2 :(得分:0)
我只想使用Arel。首先通过执行以下操作获取模型的arel表:
planograms = Planogram.arel_table
epics = Epic.arel_table
然后按以下方式创建您的查询:
Planogram.joins(:epic).where(epics[:user_id].eq(USER_ID))