0

私のモデル(単なるイラスト)

Movie   
has_many :usermovies

Usermovie
  belongs_to :user   
  belongs_to :movie

User
  has_many :usermovies

compareアクション中

@compare_with = User.find(params[:compare_with])
I have  user_ids = [current_user.id,@compare_with.id]
@movies = Movie.joins("usermovies").where('usermovies.user_id' => user_ids)

エラー:

Mysql2::Error: Unknown table 'movies': SELECT `movies`.* FROM `movies` usermovies WHERE `usermovies`.`user_id` IN (3, 1)

Extracted source (around line #9):

6:   <td><%= "#{@compare_with.name}'s rating" %> </td>
7: </thead>
8: <tbody>
9:   <% @movies.each do |movie| %>
10:   <td></td>
11:   <td></td>
12:   <% end %>

しかし、:includes代わりに使用すると:joins、うまく機能します。

コードの何が問題になっていますか?

4

1 に答える 1

4

問題は にあり.joins("usermovies")ます。

次のようなシンボルを渡す必要があります。

joins(:usermovies)

または、文字列を渡す場合:

joins("JOIN usermovies")

これは、文字列を渡すときに、JOIN型も指定することを Rails が想定しているためです。INNER JOINこの機能は、デフォルトをLEFT OUTER JOINまたはに変更する場合に特に便利ですRIGHT OUTER JOIN。ただし、Rails は結合タイプを変更するかどうかを認識していないため、文字列を渡す場合はJOIN、結合タイプを変更したくない場合でも明示的に文字列に含める必要があります。

于 2012-09-06T09:46:28.663 に答える