我正在尝试在我的某个Active Record模型上创建搜索方法。
我希望用户能够在数据库中搜索记录。
我知道我可以这样做:Model.where('field like ?', "%#{query}%')
但它不只是一个字段,而是两个字段(名字和姓氏)。但是我不想单独搜索它们,我想连接名字和姓氏,并搜索连接字段就像搜索查询一样。
这可以通过Active Record完成,类似于SQL字段的连接方式吗?什么是最好的解决方案?
答案 0 :(得分:0)
您可以对不同的字段使用相同的where方法。例如
Model.where(first_name: "Jonathan", last_name: "Smith")
这将为您提供所有关系(在Rails 4中),其中first_name AND last_name匹配。
如果您希望查询更具动态性(例如,如果您想同时使用OR
,AND
),则可以使用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}%") }