4

这是我试图在 rails 中使用的 activerecord 查询

q = "Manchester"
b = "John Smith"

Model.find(:all, :conditions => ["city ? AND name like ?", q, b])

但我在 Rails 控制台中收到此错误

ActiveRecord::StatementInvalid: SQLite3::SQLException: near "'Manchester'": 语法错误: SELECT "model".* FROM "model" WHERE (city 'Manchester' AND name like 'John Smith')

请帮忙!

4

3 回答 3

8

你错过LIKEcity

Model.where('city LIKE ? AND name LIKE ?', "%#{q}%", "%#{b}%");
于 2012-08-21T04:17:25.227 回答
5

您还可以使用这种语法,它比试图找出?哪个变量与哪个变量更易读。我的意思是,如果你有 1 个或 2 个,那很好,但是一旦你有更多,它就会变得很丑。

Model.where("city LIKE :city AND name LIKE :name", { city: "%#{q}%", name: "%#{b}%"  })

占位符和散列键可以是任何你喜欢的东西,只要它们匹配(例如,不要使用:city然后hamster:在散列键中)。

这样做的好处是您还可以使用一个变量进行多次搜索:

where("user LIKE :term OR email LIKE :term OR friends LIKE :term", { term: "%#{params[:term]}%"})
于 2014-05-13T14:59:01.423 回答
3

尝试这个:

Model.find(:all, :conditions => ["city = ? AND name like ?", q, b])
于 2012-08-21T04:14:20.030 回答