我有一个名为Topic的模型,其名称为字段。
所以说我有一个我正在寻找的术语,苹果。
如果我做了
Topic.find_by_name("apple")
我用苹果名称取回了一条记录。这很好 - 但是如何更改find_by_name以便它可以找到“apple juice”以及“apple” - 基本上,找到包含原始查询的名称或者与原始查询完全匹配的名称?
修改: 感谢所有的回复。我想我早些时候应该更清楚一点,但是如果我想通过变量名找到怎么办(显然我不想每次都找到名字“apple”:))?
如何操作Topic.where来适应这个? 所以......就像......
@topic = Topic.where(......., @name)
答案 0 :(得分:106)
我认为这样的事情应该有效:
Topic.where("name like ?", "%apple%")
为了适应您的编辑:
Topic.where("name like ?", "%#{@search}%")
基本字符串插值,你在字符串@search
中使用%%
的值,所以你@search = "apple"
然后你最终得到%apple%
答案 1 :(得分:10)
在Rails 3中看起来你想要使用where:
Topic.where("name ILIKE ?", "%apple%")
答案 2 :(得分:8)
不要直接放置字符串。它叫做SQL注入。您应该使用.where
:
Topic.where("name like '?%' ", params[:name])
答案 3 :(得分:8)
使用PostgreSQL,您还可以使用match operators:
Topic.where("name ~* ?", @search)
答案 4 :(得分:1)
尝试
Topic.where("name like ?",'%apple%')
Topic.find(:all, :conditions => ["name like ?","%apple%"])