railsでレコードを検索しようとすると、そのidに関連付けられたすべてのレコードを返すことができます。たとえば、 "John"を検索すると、同じfkを持つすべてのレコードを返すことができます。Ruby on Railsで検索が使用されたときに見つかったレコードに関連するすべてのレコードを含める
コントローラ表1
| id |
------
| 1 |
| 2 |
表2
| id | fk | name |
-------------------
| 1 | 1 | John |
| 2 | 1 | Doe |
| 3 | 2 | David |
| 4 | 2 | Smith |
SQL
レールコード
includes(:table2).where('table2.name LIKE ?', "%#{search}%").references(:table2)
SQLは
を返さSELECT FROM `table1` LEFT OUTER JOIN `table2` ON `table2`.`fk` = `table1`.`id` WHERE (table2.name LIKE '%John%') AND `table1`.`id` IN (1)
これは、検索された行のみを返します。私は同じfkでレコードをどのように返すのですか?
TABLE1はhas_many :table2
を使用し、表2には、事前にbelongs_to :table1
感謝を使用しています!
UPDATE
index.html.erbだけコントローラに入力を送信し、コントローラは、クエリを実行し、結果を返すフォームを含みます。
期待入力:ジョン
期待される結果:
| id | fk | name |
------------------
| 1 | 1 | John |
| 2 | 1 | Doe |
index.html.erb
<%= form_tag(categories_path, method: :get, :enforce_utf8 => false, id: "search-input") do %>
<%= text_field_tag :search, params[:search] %>
<button type="submit"></button>
<% end %>
categories_controller.rb
def index
@categories = Category.search(params[:search])
end
def Category.search(search)
includes(:category_type).where('category_type.name LIKE ?', "%#{search}%").references(:category_type)
end
外部キーが一致するすべての行だけが必要な場合は、「検索」ロジックは何ですか? 'table1.table2s'を使用して、与えられた' table1'のすべての 'table2'レコードを取得してください。 – meagar
@meagarフロントエンドにはユーザーが名前を検索できる検索ボックスがあります。検索ロジックは、私が理解する限り、外部キー –
によって関連付けられているレコードと一致するレコードを返すために使用され、 'name'でクエリを検索して、そのレコード名前を付けたり、同じ 'fk'を共有することができます。したがって、 'John'の場合、結果は' Table1.find(1).table2s'となります。 –