PG :: UndefinedTable:错误:缺少从句-使用两个模型进行搜索Rails

WQ.*_*vin 3 join ruby-on-rails

我的着陆页上有一个搜索栏,可以在其中搜索来自不同大学的用户的书籍。当它被重定向到书索引页面时,它似乎不接受.joins。书籍属于用户,用户有很多书籍。

我总是得到:

PG :: UndefinedTable:错误:缺少表“用户”的FROM子句条目

BooksController.rb

def index
  if params[:book][:title].present? && params[:users][:university].present?
  @books = Book.where({title: params[:book][:title]})
  .joins(:user).where(user: {university: params[:users][:university]}).uniq
  end
end
Run Code Online (Sandbox Code Playgroud)

PagesController.rb

def home
  @books = Book.new
end
Run Code Online (Sandbox Code Playgroud)

这是我在simple_form中进行的搜索:

<%= simple_form_for [@books], url: books_path, method: :get do |f| %>
  <ul class="list-inline">
    <li><%= f.input :title, placeholder: "Title", label: false %></li>
    <%= simple_fields_for :users do |r| %>
      <li><%= r.input :university, placeholder: "University", label: false %></li>
    <% end %>
  </ul>
    <%= f.button :submit, 'search', class: "btn"  %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

routes.rb

resources :books do
  resources :users
end
Run Code Online (Sandbox Code Playgroud)

完整错误是:

第1行:...“ books”。“ user_id”在“ books”。“ title” = $ 1 AND“ user”。“ un ... ^:SELECT DISTINCT” books“。* FROM” books“ INNER JOIN” users “在”用户“上。” id“ =”书“。” user_id“在”书“上。”标题“ = $ 1 AND”用户“。”大学“ = $ 2>

MrY*_*iji 7

where方法期望接收确切的表名(请参见此处的完整示例:如何基于属于第一个模型的另一个模型的属性来查询模型?):

@books = Book.where({title: params[:book][:title]})
@books = @books.joins(:user).where(users: {university: params[:users][:university]}).uniq
#                     ^ relation name  ^ exact name of the table
Run Code Online (Sandbox Code Playgroud)

如果出于某种原因,存储User记录的表的名称被命名为utilisateurs,则where用法将是:

@books = Book.joins(:user).where(utilisateurs: { name: 'Bob' })
Run Code Online (Sandbox Code Playgroud)