gpt4 book ai didi

ruby-on-rails - Rails ActiveRecord - 搜索多个属性

转载 作者:行者123 更新时间:2023-12-04 04:45:11 25 4
gpt4 key购买 nike

我正在实现一个简单的搜索功能,它应该检查用户名、姓氏和名字中的字符串。我在旧的 RailsCast 上看到过这个 ActiveRecord 方法:

http://railscasts.com/episodes/37-simple-search-form

find(:all, :conditions => ['name LIKE ?', "%#{search}%"])

但是我该如何让它在名称、姓氏和名字中搜索关键字,并在其中一个字段与该术语匹配时返回记录?

我还想知道 RailsCast 上的代码是否容易发生 SQL 注入(inject)?

非常感谢!

最佳答案

在模型的所有领域进行搜索的更通用的解决方案是这样的

def search_in_all_fields model, text
model.where(
model.column_names
.map {|field| "#{field} like '%#{text}%'" }
.join(" or ")
)
end

或者更好地作为模型本身的范围
class Model < ActiveRecord::Base
scope :search_in_all_fields, ->(text){
where(
column_names
.map {|field| "#{field} like '%#{text}%'" }
.join(" or ")
)
}
end

你只需要这样称呼它
Model.search_in_all_fields "test"

在你开始之前..,不,sql注入(inject)在这里可能不起作用,但仍然更好更短
class Model < ActiveRecord::Base
scope :search_all_fields, ->(text){
where("#{column_names.join(' || ')} like ?", "%#{text}%")
}
end

关于ruby-on-rails - Rails ActiveRecord - 搜索多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11816919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com