Rails:如何find_by包含特定字符串的字段

时间:2012-03-14 19:01:06

标签: sql ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有一个名为Topic的模型,其名称为字段。

所以说我有一个我正在寻找的术语,苹果。

如果我做了

Topic.find_by_name("apple")

我用苹果名称取回了一条记录。这很好 - 但是如何更改find​​_by_name以便它可以找到“apple juice”以及“apple” - 基本上,找到包含原始查询的名称或者与原始查询完全匹配的名称?

修改: 感谢所有的回复。我想我早些时候应该更清楚一点,但是如果我想通过变量名找到怎么办(显然我不想每次都找到名字“apple”:))?

如何操作Topic.where来适应这个? 所以......就像......

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

5 个答案:

答案 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%"])