获取重复查询字符串的最快方法

时间:2014-03-07 10:26:18

标签: ruby-on-rails ruby activerecord enumerable

我需要使用以下字符串作为查询的一部分:

"(lower(first_name) LIKE lower(:first_param) AND lower(last_name) LIKE lower(:second_param)) OR (lower(first_name) LIKE lower(:second_param) AND lower(last_name) LIKE lower(:first_param))"

并不觉得不使用某种可枚举的方法来生成它而不是将其放在当前表单中的代码中。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

将逻辑放在where子句中,如。

YourModel.where("(lower(first_name) LIKE lower(:first_param) AND lower(last_name) LIKE lower(:second_param)) OR (lower(first_name) LIKE lower(:second_param) AND lower(last_name) LIKE lower(:first_param))")

答案 1 :(得分:0)

使用范围:

class User #or whatever
  scope :match_full_name, ->(first_name, last_name) do
    where("your query string", {:first_param => first_name, :second_param => last_name})
  end
end

用法:

User.match_full_name("john", "smith")