在我的rails应用

时间:2015-05-05 00:08:10

标签: ruby-on-rails

使用此gem:http://filterrific.clearcove.ca/我已在我的应用上成功设置搜索。这是使用的范围。

scope :search_by_name, ->(name){ where(name: name) }

让我们说有一个名字叫Jonathon'并且你搜索' jon'我希望它能带来这个结果。此外,如果您正在搜索“jonathon' (将J改为j)它没有显示结果。你必须完全按照条目。

1 个答案:

答案 0 :(得分:0)

要在数据库之间保持可移植性,请考虑将范围更改为命名方法并使用AREL匹配。

def search_by_name(name)
  where(arel_table[:name].matches(name))
end

虽然范围可能有效:

scope :search_by_name, ->(name){ where(arel_table[:name].matches(name)) }

由于命名范围与方法相同,特别是当你传递一个lambda变量时,没有缺点它是一个方法而不是一个范围。

您可能需要在名称参数前面添加或附加%(或两者)以查找包含参数的任何内容(而不仅仅是对不区分大小写的匹配。所以也许......

def search_by_name(name)
  where(arel_table[:name].matches('%' + name + '%'))
end