是否可以使用'或'语句执行find_by查询?例如:
@product ||= Product.find_by_upc(params[:code]) if params[:code]
@product ||= Product.find_by_cspc(params[:code]) if params[:code]
Run Code Online (Sandbox Code Playgroud)
像(不起作用):
@product ||= Product.find_by_upc_or_cspc(params[:code]) if params[:code]
Run Code Online (Sandbox Code Playgroud)
谢谢!
不使用Activerecord方法
这可能有效:
code = params[:code]
@product = Product.find(:all, :conditions => ["upc = ? or cspc = ?", code, code])
Run Code Online (Sandbox Code Playgroud)
从Rails 5开始,一种方法如下:
对于第一个匹配记录:
Product.find_by("upc = ? OR cspc = ?", params[:code], params[:code])
Run Code Online (Sandbox Code Playgroud)
对于所有匹配的记录:
Product.where("upc = ? OR cspc = ?", params[:code], params[:code])
Run Code Online (Sandbox Code Playgroud)
清理尼古拉斯的代码:
@products = Product.all(:conditions => ["upc = :code or cspc = :code", {:code => params[:code]}])
Run Code Online (Sandbox Code Playgroud)
从 Rails 6 开始,ActiveRecord 有一个or运算符。
它并不完全按照您的预期工作,因为您需要在or. 但最好避免需要原始 SQL。
Person.where(first_name: "John").or(Person.where(last_name: "Smith"))
Run Code Online (Sandbox Code Playgroud)
这会在后台生成以下 SQL。
SELECT "people".* FROM "people" WHERE ("people"."first_name" = $1 OR "people"."last_name" = $2) LIMIT $3
[["first_name", "John"], ["last_name", "Smith"], ["LIMIT", 11]]
Run Code Online (Sandbox Code Playgroud)