我的模特(只是插图)
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
时,它的效果非常好。
任何想法代码有什么问题?
答案 0 :(得分:4)
问题出在.joins("usermovies")
。
您必须传递符号,例如:
joins(:usermovies)
否则,如果你传递一个字符串:
joins("JOIN usermovies")
这是因为当你传递一个字符串时,Rails希望你也指定JOIN
类型。如果您要将默认INNER JOIN
更改为LEFT OUTER JOIN
或RIGHT OUTER JOIN
,此功能特别有用。但是,由于Rails不知道您是否要更改连接类型,因此如果传递字符串,即使您不想更改连接类型,也必须在字符串中明确包含JOIN
。