我需要从2个参数中找到一条记录,但我需要其中一个不区分大小写。目前区分大小写的是
c = Course.find_by(subject_area: area, cat_number: cat)
但我需要subject_area不区分大小写。我怎么做到这一点?
它取决于数据库,您可能需要传入特定于db的SQL(而不是使用find_by)。你在用postrges吗?如果是这样,这通常会起作用:
Course.where("LOWER(subject_area) = ? AND cat_number = ?", area.downcase, cat)
或者你可以在每次保存一个新的时候将你的subject_area
转换为downcase ...然后只需使用:
Course.find_by(subject_area: area.downcase, cat_number: cat)
我可能是错的,但目前不知道任何rails本地方式做一个不区分大小写的导轨find_by
如果您需要将此属性设置为不区分大小写,那么正确的方法是确保它始终是模型中的特定属性
before_save { self.subject_area = subject_area.downcase }
您也可以将现有数据迁移为低级。
完成后,您的操作查找仍然需要确保area
在查询中如建议的那样下降。 Course.find_by(subject_area: area.downcase, cat_number: cat)
选项2:我知道我忘记了这一点。假设你不想去迁移路径。只需定义一个范围。 http://guides.rubyonrails.org/v4.1/active_record_querying.html#scopes
scope :area_nocase, (area) -> { where("LOWER(subject_area) = ?", area.downcase) }
然后就可以使用它了
Course.area_nocase(area)
或cat.course.area_nocase(area)
或链接它,但你需要。
另一种选择可以
c = Course.find_by("LOWER(subject_area)= ? AND cat_number = ?", area.downcase, cat)