rails连接的问题

时间:2012-09-06 09:41:56

标签: ruby-on-rails ruby-on-rails-3.2

我的模特(只是插图)

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时,它的效果非常好。

任何想法代码有什么问题?

1 个答案:

答案 0 :(得分:4)

问题出在.joins("usermovies")

您必须传递符号,例如:

joins(:usermovies)

否则,如果你传递一个字符串:

joins("JOIN usermovies")

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