2017-10-10 70 views
-1

當試圖在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 
+1

如果你只是希望所有行的外鍵匹配,什麼是「搜索」的邏輯?只需使用'table1.table2s'來獲取給定'table1'的所有'table2'記錄。 – meagar

+0

@meagar在前端我有一個搜索框,用戶可以在其中搜索名稱。據我所知,搜索邏輯用於返回與通過外鍵 –

+0

關聯的匹配記錄,他希望在'name'中搜索查詢,然後返回所有具有該記錄的記錄名稱,或共享相同的'fk'。因此,對於'約翰',結果將是'Table1.find(1).table2s' –

回答

0

我做返回所有的記錄主表的查詢,然後使用解決了這個他們的ID從第二張表中返回記錄。我認爲這可能是另一種一次性獲得所有結果的方式,但現在這可以做到。

@records = joins(:category_typed).select('categories.id').where('category_types.name LIKE ?, "%#{search}%") 
where(id: @records.ids) 
0

我想你正在尋找的是

CategoryType.where(fk: CategoryType.where('category_types.name LIKE ?', "%#{search}%").select(:fk)) 

,這將產生以下須藤SQL

SELECT 
    category_types.* 
FROM 
    category_types 
WHERE 
    category_types.fk IN (
    SELECT 
     category_types.fk 
    FROM 
     category_types 
    WHERE 
     category_types.name LIKE '%JOHN%' 
    ) 
+0

感謝您的回覆,不確定這是否會像我在Category中那樣工作,我仍然希望得到主表的結果。 –

相關問題