ruby-on-rails - PG::UndefinedTable: 错误: 缺少 FROM 子句 — 使用两个模型进行搜索 Rails

标签 ruby-on-rails join

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

我总是得到:

PG::UndefinedTable:错误:缺少表“user”的 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 %>

路线.rb

resources :books do
  resources :users
end

完整错误是:

LINE 1: ... "books"."user_id" WHERE "books"."title" = $1 AND "user"."un... ^ : SELECT DISTINCT "books".* FROM "books" INNER JOIN "users" ON "users"."id" = "books"."user_id" WHERE "books"."title" = $1 AND "user"."university" = $2>

最佳答案

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' })

关于ruby-on-rails - PG::UndefinedTable: 错误: 缺少 FROM 子句 — 使用两个模型进行搜索 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46039056/

相关文章:

MySQL-在单列上选择不同的值

sql - 日期范围的叉积

python - 类型错误需要 str 实例,找到 float

ruby-on-rails - Ruby on rails 命名日期/时间字段的约定

ruby-on-rails - Elasticsearch 使用脚本从聚合中获取前 5 个结果

ruby-on-rails - 设计 NoMethodError 'for' ParameterSanitizer

mysql - 从连接表中选择最后一个值和总数

javascript - 如何在没有循环的情况下加入对象值?

ruby-on-rails - NameError:Heroku 日志中未初始化的常量 CarrierWave::Storage::Fog

sql - 如何使用嵌套关联查询 STI 驱动的模型?