2016-09-14 54 views
0

我需要從2個參數中找到一條記錄,但我需要其中的一個不區分大小寫。目前區分大小寫的行是Ruby on Rails find_by不區分大小寫

c = Course.find_by(subject_area: area, cat_number: cat) 

但我需要subject_area不區分大小寫。我將如何實現這一目標?

回答

1

它取決於數據庫,並且您可能需要傳遞特定於數據庫的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

0

如果您需要此屬性不區分大小寫,那麼正確的方法是確保它始終是一個特定的模型

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) 或連鎖但是它需要。