【发布时间】:2012-06-06 06:39:39
【问题描述】:
是的,有一个几乎完全一样的问题,但我不认为它是用 Rails 方式回答的。太不干了,很痛Case-insensitive search in Rails model
我想根据名称在我的 postgresql 数据库中搜索产品。 我可能还想在同一个数据库中搜索客户。
所以我利用了上一个问题中的建议。 我的产品表中有一个函数 Product.find_by_name #获取名称并按照前面的答案进行查找。
简单!现在客户怎么样...
Customer.find_by_contact_name
Customer.find_by_email_address
Customer.find_by_company_name
Customer.find_by_phone
Customer.find_by_contact_name_and_phone
Customer.find_by_industry_id_and_contact_name #the insdustry_id is not text so it can't be found.
# Ahh snot I forgot a few.
Customer.find_by_contact_name_and_company_name
Customer.find_by_contact_name_and_email_address
Customer.find_by_contact_name_and_phone
Customer.find_by_industry_id_and_email_address
...
其中每一项都必须进行硬编码。当我需要另一个时,我必须打开客户,复制代码,然后创建一个新函数。因为我不知道这些值是整数、字符串还是日期。
我正在寻找一种方法,不必为每个模型和每次搜索迭代都实现这一点,我可能希望在未来的某个时候进行。
我想对另一个问题的回答表示感谢。他们只是看起来不像“Rails”,我希望有更多的东西。手指交叉,有超过 4 个月的人,可以指出一个真正的 DRY。
【问题讨论】:
-
你指的是哪个问题? (可能对上下文有帮助)
-
添加了指向其他“相同”问题的链接
-
可能想结帐 - github.com/ernie/ransack - 看看其中的一些? railscasts.com/?tag_id=30 - 如果你自己扮演角色,我倾向于使用 AREL where 语法
Customer.where("company_name ILIKE ?", params[:company_name]) if params[:company_name].present?
标签: sql ruby-on-rails postgresql search