我需要從2個參數中找到一條記錄,但我需要其中的一個不區分大小寫。目前區分大小寫的行是Ruby on Rails find_by不區分大小寫
c = Course.find_by(subject_area: area, cat_number: cat)
但我需要subject_area不區分大小寫。我將如何實現這一目標?
我需要從2個參數中找到一條記錄,但我需要其中的一個不區分大小寫。目前區分大小寫的行是Ruby on Rails find_by不區分大小寫
c = Course.find_by(subject_area: area, cat_number: cat)
但我需要subject_area不區分大小寫。我將如何實現這一目標?
它取決於數據庫,並且您可能需要傳遞特定於數據庫的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)
我可能是錯的,但目前還不知道做任何軌道本地的方式做一個不區分大小寫的軌道find_by
如果您需要此屬性不區分大小寫,那麼正確的方法是確保它始終是一個特定的模型
before_save { self.subject_area = subject_area.downcase }
您也可以將現有的數據遷移爲downcased。
完成該操作後,您仍然需要按照建議確保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)
或連鎖但是它需要。