关于sql:Rails:如何使用包含特定字符串的字段进行find_by

Rails: How to find_by a field containing a certain string

我有一个名为Topic的模型,该模型具有一个名称作为字段。

所以说我要搜索的术语是苹果。

如果我做

1
Topic.find_by_name("apple")

我得到了一条记录,名字叫苹果。很好-但是如何更改find??_by_name以便它既可以找到"苹果汁"也可以找到"苹果汁"-基本上是,找到包含原始查询或与原始查询完全匹配的名称?

编辑:
感谢您的所有回复。我想我本来应该更清楚一点,但是如果我想用一个变量名来查找(显然我不想每次都用" apple"来查找:))怎么办?

我如何操纵Topic.where以适应这一情况?
所以像...

1
@topic = Topic.where(......., @name)


我认为类似的方法应该起作用:

1
Topic.where("name like ?","%apple%")

要适应您的编辑:

1
Topic.where("name like ?","%#{@search}%")

基本字符串插值,您正在字符串%%中使用@search的值,所以您@search ="apple"然后以%apple%

结尾


在PostgreSQL中,您还可以使用匹配运算符:

1
Topic.where("name ~* ?", @SEARCH)

不要那样直接放置字符串。它称为SQL注入。您应该改用.where

1
Topic.where("name like '?%'", params[:name])


就像在Rails 3中一样,您想使用where:

1
Topic.where("name ILIKE ?","%apple%")


尝试

1
2
Topic.where("name like ?",'%apple%')
Topic.find(:ALL, :conditions => ["name like ?","%apple%"])