Rails,其中字段连接像搜索查询

时间:2015-03-09 16:12:06

标签: mysql ruby-on-rails activerecord

我正在尝试在我的某个Active Record模型上创建搜索方法。

我希望用户能够在数据库中搜索记录。

我知道我可以这样做:Model.where('field like ?', "%#{query}%')

但它不只是一个字段,而是两个字段(名字和姓氏)。但是我不想单独搜索它们,我想连接名字和姓氏,并搜索连接字段就像搜索查询一样。

这可以通过Active Record完成,类似于SQL字段的连接方式吗?什么是最好的解决方案?

2 个答案:

答案 0 :(得分:0)

您可以对不同的字段使用相同的where方法。例如

Model.where(first_name: "Jonathan", last_name: "Smith")

这将为您提供所有关系(在Rails 4中),其中first_name AND last_name匹配。

如果您希望查询更具动态性(例如,如果您想同时使用ORAND),则可以使用find_by_sql

Person.find_by_sql("SELECT * FROM people WHERE first_name = ? OR first_name = ? AND last_name = ?", first_name1, first_name2, last_name)

但它可能需要更具体的代码化学来构造这样的SQL查询字符串

答案 1 :(得分:0)

在模型中创建一个类方法,如下所示:

def self.search_by_full_name(query)
  where("CONCAT_WS(' ', first_name, last_name) LIKE ?", "%#{query}%")
end

但是在Rails中,在这种场景中声明范围而不是类方法更常见,例如:

scope :search_by_full_name ->(query) { where("CONCAT_WS(' ', first_name, last_name) LIKE ?", "%#{query}%") }