2016-12-01 33 views
1

我已經產生了三個不同的支架在軌詞搜索即教育健康喬布斯所有這些包含各五根弦。我應該如何進行搜索以搜索所有這些字符串。 例如:我的教育腳手架有一個名爲PRIMARY SCHOOL的字符串, 所以如果用戶搜索紐約最好的小學它應該返回所有在PRIMARY SCHOOL字符串中提交的結果。Word來

回答

0

每當您嘗試在Rails中進行多表搜索時,您都會在ActiveRecord::Base背後突破某些想法。

最好是,你會強制搜索單個表。 然後對於每個模型,您可以創建一個search方法。

def self.search(query) 
    query = "%#{query}%" 
    where(
    'column_1 LIKE ? 
    OR column_2 LIKE ? 
    OR column_3 LIKE ? 
    OR column_4 LIKE ? 
    OR column_5 LIKE ?', 
    query, 
    query, 
    query, 
    query, 
    query 
) 
end 

否則,要實現多表搜索,您需要一個手寫查詢。

我會不惜一切代價避免這種情況。

query = 'PRIMARY SCHOOL' 
sql = <<SQL 
    SELECT educations.*, 
     healths.*, 
     jobs.*, 
    FROM educations, 
     healths, 
     jobs 
    WHERE (each_table.each_column LIKE "%#{query}%") 
SQL 

records = ActiveRecord::Base.connection.execute(sql) 

records.each do |record| 
    # ... 
end 

這是一個在Ruby on Rails中使用SQL的非常不推薦的方式。

+0

此外,我個人使用一個叫做'squeel'的gem來清除這些查詢。用'squeel'你可以寫'where {(column.like「%#{query}%」)| (column2.like「%#{query}%」)}'。這可以使代碼更清潔。 – fbelanger

+0

感謝您的幫助@fbelanger ...我想搜索整個專欄...例如我有一個名爲NAME的文本字段,用戶填寫名稱...試圖實現的是當有人搜索單詞名稱那麼他應該得到用戶填寫的完整列表。你能幫我解決這個問題嗎? –