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")

这是因为当你传递一个字符串时,Rails 期望你也指定JOIN类型。如果您想将默认值更改INNER JOIN为 aLEFT OUTER JOIN或,此功能特别有用RIGHT OUTER JOIN。但是,由于 Rails 不知道您是否要更改连接类型,因此如果您传递一个字符串,即使您不想更改连接类型,也必须显式包含JOIN在字符串中。

于 2012-09-06T09:46:28.663 回答