我试图做类似的Rails 3 =>:的has_many XS,通过=> Y,Z
class Event < ActiveRecord::Base
has_many :links, :dependent => :destroy
belongs_to :activity
belongs_to :facility
has_many :infos, :through => :activity
has_many :infos, :through => :facility
accepts_nested_attributes_for :infos
end
但是这会导致has_many :infos, :through => :facility
,而has_many :infos, :through => :activity
被忽略。
我该如何用正确的语法来表达它?
编辑:
如果我实施弗拉德的方法,然后使用
@events = Event.all(:包括=> [:facility_infos,:activity_infos]:条件=> [“的相关信息.language_id =?“,2],:order =>:time)
我得到:activity_infos
for language_id == 2,但不幸的是我得到了所有语言的:facility_infos
! 如何解决这个问题?
编辑2:
这里是你要求的输出:。
选择 “事件”, “ID” AS t0_r0, “事件”, “时间” 作为t0_r1, “事件”“天天“AS t0_r2,”events“。”activity_id“AS t0_r3,”events“。”created_at“AS t0_r4,”events“。”updated_at“AS t0_r5,”events“。”facility_id“AS t0_r6,”events“。”home “AS t0_r7,”infos“。”id“AS t1_r0,”infos“。”title“AS t1_r1,”infos“。”description“AS t1_r2,”infos“。”location“AS t1_r3,”infos“。”language_id “AS t1_r4,”infos“,”created_at“AS t1_r5,”infos“。”updated_at“AS t1_r6,”infos“。”activity_id“AS t1_r7,”infos“。”facility_id“AS t1_r8,”infos“。”service_id “ 一个S t1_r9,“activity_infos_events”,“id”,AS t2_r0,“activity_infos_events”。“title”AS t2_r1,“activity_infos_events”。“description”AS t2_r2,“activity_infos_events”。“location”AS t2_r3,“activity_infos_events”。“language_id” AS t2_r4,“activity_infos_events”,“created_at”AS t2_r5,“activity_infos_events”,“updated_at”,AS t2_r6,“activity_infos_events”,“activity_id”AS t2_r7,“activity_infos_events”。“facility_id”AS t2_r8,“activity_infos_events”。“service_id” AS t2_r9 FROM“events”LEFT OUTER JOIN“facilities”ON“events”。“facility_id”=“facilities”。“id”LEFT OUTER JOIN“infos”ON“infos”。“facility_id”=“facilities”。“id” LEFT OUTER JOIN“activities”ON“events”。“activity_id”=“activities”。“id”LEFT OUTER JOIN“infos”“activity_infos_events”ON“activity_infos_events”。“activity_id”=“activities”。“id”WHERE(infos .language_id = 2)ORDER BY time
http://stackoverflow.com/questions/5701175/access-has-many-relation-in-two-diferent-ways-activerecord-rails – Sector 2011-04-19 11:40:40
更新了我的文章。这应该返回一个SQL查询,所以我们可以检查发生了什么 – 2011-04-19 12:50:30
增加更新2 :) – 2011-04-19 14:01:56