无法按名称和主键搜索

时间:2013-01-24 05:29:23

标签: ruby-on-rails rails-activerecord

以下查询根本不按id(主键)进行搜索 - 它一直将0分配给id,将search_str分配给name。如果我们使用equals运算符而不是匹配“id”匹配,它会正确执行。以下范围是否存在问题。

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

3 个答案:

答案 0 :(得分:1)

我对你要做的事情感到有些困惑,但首先是

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

你错过了#,我认为这应该是

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

其次,你没有在任何地方使用你的name论证,只是看看这个,也许你想用search_str取代name

答案 1 :(得分:1)

首先你做了一个错字,我认为你在范围定义结束时错过了一个结束大括号

回答我认为你正在做一些匹配id或头衔的事情?(真的我不敢相信你不应该这样做)

请注意,“search_str”来自无处,因为该块的参数是“name”,因此您可以将其与要比较的表的任何属性进行比较:)

我能为你的问题思考的答案是

范围:or_search,lambda {| title |其中(arel_table [:标题] .matches( “%#{TITLE}%”)或(arel_table [:ID] .matches( “#{TITLE}”)))} 削减

答案 2 :(得分:1)

不确定您是否只是想了解它为什么不起作用,或者您是否正在寻找可行的解决方案。

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

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