当试图在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
在控制器Rails代码
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'。因此,对于'约翰',结果将是'Table1.find(1).table2s' –