1

私はこれにしばらく取り組んできましたが、どこにエラーがあるのか​​わかりません。

ユーザーモデル(:name、:password、:email)、イベントモデル(:name、:etc)、インタレストモデル(:name)[> all singular <]

次に、2つの結合テーブル->UsersInterestsとEventsInterestsを作成しました。それぞれに主キーは含まれず、それぞれuser_id/interest_idとevent_id/interest_idのみで構成されます。[>複数形<]

私のモデルには、次のようなHABTM関係が含まれています

user.rb => has_and_belongs_to_many :interests
event.rb => has_and_belongs_to_many :interests
interest.rb => has_and_belongs_to_many :users
               has_and_belongs_to_many :events
events_interests.rb => has_and_belongs_to_many :interests
                       has_and_belongs_to_many :events
users_interests.rb => has_and_belongs_to_many :users
                      has_and_belongs_to_many :interests

Whew..okそこで、特定のユーザーと関心を共有するすべてのイベントを検索するnamed_scopeを作成したいと思いました。これが誰かが私を助けてくれたコードです。

named_scope :shares_interest_with_user, lambda {|user| { :joins => "LEFT JOIN
              events_interests ei ON ei.event_id = Event.id " +
             "LEFT JOIN users_interests ui ON ui.interest_id = ei.interest_id",
           :conditions => ["ui.user_id = ?", user]  }}

コントローラから実行した場合=>

  @user = User.find(1) 
  @events = Event.shares_interest_with_user(@user)

SQLエラーが発生します:「そのような列はありません:Event.id:SELECT"events"。*FROM "events" LEFT JOIN events_interests ei ON ei.event_id=...........」

これで、イベントモデルにIDがあり、すべての列名が正しいと思います。不足しているものを誰かが確認できますか?

4

1 に答える 1

2

HABTMから離れて、代わりにを使用することをお勧めしhas_many :throughます。

これは、SOユーザーのJaimeBellmyerによって書かれた違いを説明するすばらしいブログ投稿です。

于 2010-02-01T22:25:59.473 に答える