Rails activerecord LIKE AND子句错误

Mat*_*nes 4 activerecord ruby-on-rails

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

q = "Manchester"
b = "John Smith"

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

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

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

请帮忙!

xda*_*azz 8

你错过LIKEcity.

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


kak*_*bei 5

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

Model.where("city LIKE :city AND name LIKE :name", { city: "%#{q}%", name: "%#{b}%"  })
Run Code Online (Sandbox Code Playgroud)

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

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

where("user LIKE :term OR email LIKE :term OR friends LIKE :term", { term: "%#{params[:term]}%"})
Run Code Online (Sandbox Code Playgroud)