使用此宝石:http://filterrific.clearcove.ca/我已成功在我的应用程序上设置搜索。这是使用的范围。使我的导轨应用程序不区分大小写
scope :search_by_name, ->(name){ where(name: name) }
可以说有一个名字叫'Jonathon',而你寻找'jon'我希望它能带来这个结果。此外,现在如果您搜索'jonathon'(将J更改为j),则不会显示结果。您必须完全按照条目进行。
使用此宝石:http://filterrific.clearcove.ca/我已成功在我的应用程序上设置搜索。这是使用的范围。使我的导轨应用程序不区分大小写
scope :search_by_name, ->(name){ where(name: name) }
可以说有一个名字叫'Jonathon',而你寻找'jon'我希望它能带来这个结果。此外,现在如果您搜索'jonathon'(将J更改为j),则不会显示结果。您必须完全按照条目进行。
要在数据库之间保持可移植性,请考虑将范围更改为命名方法并使用AREL匹配。
def search_by_name(name)
where(arel_table[:name].matches(name))
end
虽然也许范围可以工作:
由于命名的范围是相同的方法,尤其是当你传递一个λ变量,有没有它的缺点是一个方法而不是范围。
您可能需要预先设置或追加一个%
(或两者)名称参数为它寻找包含参数(而不是仅仅精确区分大小写的匹配。因此,也许什么...
def search_by_name(name)
where(arel_table[:name].matches('%' + name + '%'))
end
这个问题解决了我的大小写问题,我应该在哪里放置'def'?该项目的控制器被过滤?提前对不起我的新手h方式:) – jhammond2012
不用担心。它应该与您的范围相同,可以在控制器内进行呼叫。您应该避免将此方法放入控制器中,因为您通常需要瘦控制器(以及如此胖的模型),但更多的原因是关于模型的事情应该与模型保持一致。 – rdnewman
另外,为了清楚起见,如果修改的作用域版本工作,您不需要'def'方法。方法形式是替代方案,而不是另外。 – rdnewman
假设您的DB区分大小写(如postgresql),如果您查看链接网站中的文档(http://filterrific.clearcove.ca/pages/active_record_scope_patterns.html#search),您将看到它们如何展示如何通过使用'LOWER'搜索并降低搜索条件 – Doon