Ruby on rails 无法按名称和主键进行搜索

Ruby on rails 无法按名称和主键进行搜索,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,下面的查询根本不按id(主键)搜索-它一直将0分配给id,将搜索字符串分配给名称。如果我们对“id”使用equals运算符而不是匹配项,则可以正确地执行此操作。以下范围是否存在问题 scope :or_search, lambda {|name| where(arel_table[:name].matches("%{search_str}%").or(arel_table[:id].matches("%#{search_str}%"))) 我有点被你想做的事弄糊涂了 arel_table[:n

下面的查询根本不按id(主键)搜索-它一直将0分配给id,将搜索字符串分配给名称。如果我们对“id”使用equals运算符而不是匹配项,则可以正确地执行此操作。以下范围是否存在问题

scope :or_search, lambda {|name| where(arel_table[:name].matches("%{search_str}%").or(arel_table[:id].matches("%#{search_str}%")))

我有点被你想做的事弄糊涂了

arel_table[:name].matches("%{search_str}%")
您缺少了
#
,我想这应该是

arel_table[:name].matches("%#{search_str}%")

其次,你没有在任何地方使用你的
名称
参数,仅仅从这个角度来看,也许你想用
名称
替换
搜索

首先你输入了一个错误,我想你错过了范围定义末尾的一个右括号

回答这个问题时,我认为你正在做的事情不是比赛id就是标题?(真的我不敢相信你不应该这样做)

注意,“search_str”不知从何而来,因为块的参数是“name”,因此您可以将其与要比较的表的任何属性进行比较:)

对于你的问题,我能想到的答案是

范围:or|u search,lambda{title}where(arel|u table[:title]。匹配(“%{title}%”)。or(arel|u table[:id]。匹配(“{title}”))}
pare

不确定您是否只是试图理解它为什么不起作用,或者您是否正在寻找有效的解决方案

无论如何,以下内容不在arel中,但如果将其添加到模型中,则可以使用:

def self.or_search(str)
  where("name like :input OR id like :input", input: "%#{str}%")
end

为什么你有arel_表[:id]。匹配(“%#{search_str}%”)你应该有:arel_表[:id]。匹配(“#{search_str}”)你能提供更多关于你的plz模型的信息吗?