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>
该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)
| 归档时间: |
|
| 查看次数: |
1454 次 |
| 最近记录: |