2010-06-15 79 views
2

我試圖找到它作爲兩個條件的結果查詢的模型的結果。Rails - 查找兩個模型字段的條件

我有一個搜索代碼查找

Model.find(:all, :conditions => "name LIKE params[search]") 

但我想在搜索找到的所有記錄,其中「名LIKE PARAMS [搜索]或描述LIKE PARAMS [搜索]。

有什麼辦法到或添加到狀態中軌

,或者我應該做的if語句

回答

3

對於您可以使用此查詢,這是不容易受到SQL注入式攻擊Rails的2.X:

Model.all(:conditions => ["name LIKE ? OR description LIKE ?", 
    "%#{params[:search]}%", "%#{params[:search]}%"]) 
0

Model.find(?:?所有,:條件=>「名稱LIKE「%#{PARAMS [:SE ]%'或描述'%#{params [:search]}%'「)

這可能適合你。

+2

直接使用搜索參數會使查詢容易受到SQL注入攻擊。 – 2010-06-15 16:48:59

+0

有沒有辦法做到沒有這個漏洞? – ChrisWesAllen 2010-06-15 17:16:42

2

在Rails 2.3(使用參數,而不是純粹的SQL代碼與注射的幫助)

Model.all(:conditions=>['name LIKE ? OR name like ?','%'[email protected]_one+'%', '%'[email protected]_two+'%']) 

我也很喜歡在Rails 2.x的項目中使用Condition Builder for ActiveRecord,因爲你可以這樣做:

Condition.block{|c| 
    c.and :published, true 
    c.and {|d| 
    d.or :full_text, "LIKE", "%#{options[:qs]}%" 
    d.or :full_text, "LIKE", "%#{options[:qs]}%" 
    } 
end 

注意:Postgres用戶應該使用ILIKE(不區分大小寫)而不是LIKE。注意2:Rails 3.0將使用where子句鏈接,這很酷,並且應該很快添加一個OR操作符ActiveRelation GitHub - 但它看起來像User.where(:name =>'bob') 。或(:名稱=> '同')