Rails activerecord LIKE AND子句错误

时间:2012-08-21 04:12:11

标签: ruby-on-rails activerecord

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

q = "Manchester"
b = "John Smith"

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

但我在rails console中收到此错误

ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:near“'Manchester'”:语法错误:SELECT“model”。* FROM“model”WHERE(城市'Manchester'和名称'John Smith')

请帮忙!

3 个答案:

答案 0 :(得分:8)

LIKE错过了city

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

答案 1 :(得分:4)

您也可以使用这种语法,它比尝试找出哪个?与哪个变量更具可读性。我的意思是如果你有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]}%"})

答案 2 :(得分:3)

试试这个:

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