2013-06-08 3 views
2

Вот мои три моделей/таблицрельсы соединяют модель путаницу (присоединиться много таблиц)

class Swimming::Classschedule < ActiveRecord::Base 

    belongs_to :swimming_classtimes ,:class_name=>'Swimming::Classtime',:foreign_key => "classtime_id" 
    attr_accessible :id,:coach_id, :level_id, :note, :classtime_id 
end 


class Swimming::Classtime < ActiveRecord::Base 
    has_many :swimming_classschedules,:class_name=>'Swimming::Classschedule' 
    belongs_to :swimming_timeblocks ,:class_name=>'Swimming::Timeblock',:foreign_key => "timeblock_id"  
    attr_accessible :date, :end, :start,:timeblock_id,:id 
end 


class Swimming::Timeblock < ActiveRecord::Base 
    has_many :swimming_classtimes,:class_name=>'Swimming::Classtime' 
    attr_accessible :name,:id 
end 

Я хотел бы сделать внутреннее соединение

select * from swimming_classschedules as c inner join swimming_classtimes as t on c.classtime_id = t.id inner join swimming_timeblocks as b on c.timeblock_id = b.id where c.date >= "2013-06-01" and c.date <= "2013-07-01" and c.timeblock_id = 5 

, и я хотел бы вернуть все поля из них три таблицы не только из одного стола (скажем, плавание_класса). Я прочитал эту страницу http://guides.rubyonrails.org/association_basics.html, но до сих пор не ясно, как внутреннее соединение с рельсов моделей

UPDATE

попробовал первый ответ

Swimming::Classschedule.joins(:swimming_classtimes).joins(:swimming_timeblocks).select("swimming_classtimes.*,swimming_timeblocks.*,swimming_classschedules.*").where("swimming_classtimes.date >= '2013-06-01' and swimming_classtimes.date <= '2013-06-08' ") 

получил сообщение об ошибке

ActiveRecord::ConfigurationError: Association named 'swimming_timeblocks' was not found; perhaps you misspelled it? 

Спасибо за любую помощь

+0

Это будет полезно https://stackoverflow.com/ a/16442871/3767348 –

ответ

2

Пожалуйста, попробуйте это, у меня одно сомнение или мы должны поставить имя модели с пространством имен в join

Swimming::Classschedule.joins(:classtime).joins(:timeblock).select("swimming_classtimes.*,swimming_timeblocks.*,swimming_classschedules.*") 
+0

обновите свой вопрос своим ответом :) – wwli

0

Что вы ищете называется: joining nested associations. Вот как вы могли бы сделать это в вашем случае:

Swimming::Classschedule.joins(:classtime => :timeblock). 
select("swimming_classtimes.*,swimming_timeblocks.*,swimming_classschedules.*") 

Будем надеяться, что следующий будет предоставлять дополнительный пример и проиллюстрировать, что происходит выше: enter image description here

Смежные вопросы