當試圖在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' –