2

これが私の3つのモデル/テーブルです

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

そして、1 つのテーブル (swiming_classschedules など) からだけでなく、これら 3 つのテーブルからすべてのフィールドを返したいと思います。このページhttp://guides.rubyonrails.org/association_basics.htmlを読みましたが、Rails モデルと内部結合する方法がまだ明確ではありません

アップデート

最初の答えを試した

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?

助けてくれてありがとう

4

2 に答える 2

2

これを試してください。名前空間を持つモデルの名前を入れなければならないか、疑問がありますjoin

Swimming::Classschedule.joins(:classtime).joins(:timeblock).select("swimming_classtimes.*,swimming_timeblocks.*,swimming_classschedules.*")
于 2013-06-08T08:54:13.773 に答える
1

あなたが探しているのは、ネストされた関連付けに参加するというものです。あなたのケースでそれを行う方法は次のとおりです。

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

うまくいけば、以下は追加の例を提供し、上で何が起こっているかを説明します: ここに画像の説明を入力

于 2014-12-28T18:44:55.690 に答える