私はRails 5.1プロジェクトに取り組んでいます.Rails 5.1プロジェクトでProjectは、レコードのフィールドの値によるレコードのインデックス作成と検索、および接続されたレコードの存在によるレコードのインデックス作成と検索が必要でしたCategory( Projecthas および members to many Category)。
検索パラメーターを収集するフォームを含むアクションがありますSearchController。searchフォームには、name パラメータの入力とカテゴリの選択があります。検索が 0 件の結果を返さない限り、検索は正常に実行されます。返される結果がある場合はすべて正常に機能します。結果がないはずの場合、ActiveRecord はエラーをスローします。
Mysql2::Error: Column 'name' in where clause is ambiguous: SELECT COUNT(*) FROM `projects` INNER JOIN `categories_projects` ON `categories_projects`.`project_id` = `projects`.`id` INNER JOIN `categories` ON `categories`.`id` = `categories_projects`.`category_id` WHERE (name LIKE '%something%') AND `categories`.`id` = 1
これを引き起こしている可能性のあるアイデアはありますか?
プロジェクトモデル
class Project < ApplicationRecord
has_and_belongs_to_many :categories
end
カテゴリ モデル
class Category < ApplicationRecord
has_and_belongs_to_many :projects
end
検索コントローラー
class SearchController < ApplicationController
def search
projects = Project.all
projects = projects.where('name LIKE ?', "%#{params[:name]}%") if params[:name].present?
projects = projects.joins(:categories).where(categories: { id: params[:category_id] }) if params[:category_id].present?
@projects = projects
end
end
ルート
Rails.application.routes.draw do
...
get "search", to: "search#search"
...
end
意見
<h1>Search</h1>
<%= form_tag(search_path, method: :get) do %>
<%= label_tag :name %>
<%= text_field_tag :name, params[:name] %>
<%= label_tag :category_id %>
<%= select_tag(:category_id, options_for_select(Category.all.collect {|o| [ o.name, o.id ] }, params[:category_id]), { prompt: 'Select Category'}) %>
<%= submit_tag "Search" %>
<% end %>
<h2><%= pluralize(@projects.count, "Result") %></h2>
<% @projects.each do |project| %>
<h3><%= project.name %></h3>
<% end %>