我的目标网页上有一个搜索栏,我可以搜索来自不同大学的用户的书籍。当它被重定向到Book Index Page时似乎不接受.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
PagesController.rb
def home
@books = Book.new
end
这是我在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 %>
的routes.rb
resources :books do
resources :users
end
完整错误是:
第1行:...&#34;图书&#34;。&#34; user_id&#34;在哪里&#34;书籍&#34;。&#34;标题&#34; = $ 1 AND&#34;用户&#34;。&#34;联合国...... ^ :SELECT DISTINCT&#34; books&#34;。* FROM&#34; books&#34; INNER JOIN&#34;用户&#34; ON&#34;用户&#34;。&#34; id&#34; =&#34;书籍&#34;。&#34; user_id&#34;在哪里&#34;书籍&#34;。&#34;标题&#34; = $ 1 AND&#34;用户&#34;。&#34;大学&#34; = $ 2&gt;
答案 0 :(得分:5)
where
方法希望收到确切的表名(请参阅此处的完整示例:How to query a model based on attribute of another model which belongs to the first model?):
@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
如果由于某种原因,存储User
记录的表的名称被命名为utilisateurs
,那么where
用法将是:
@books = Book.joins(:user).where(utilisateurs: { name: 'Bob' })
答案 1 :(得分:1)
尝试使用与用户的复数形式的关系来大学查询,例如:
Book.where('title = ?', params[:book][:title])
.joins(:user)
.where(users: { university: params[:users][:university] }).uniq
答案 2 :(得分:0)
在使用.includes(:user)
进行过滤之前,请确保提供where
,以避免ERROR: missing FROM-clause entry for table