Tôi muốn để có thể làm Artist.case_insensitive_find_or_create_by_name(artist_name)
[1] (và đã cho nó hoạt động trên cả hai sqlite và PostgreSQL)Case-nhạy cảm find_or_create_by_whatever
cách tốt nhất để thực hiện điều này là gì? Ngay bây giờ tôi chỉ thêm một phương pháp trực tiếp đến Artist
lớp (loại xấu xí, đặc biệt là nếu tôi muốn chức năng này trong lớp khác, nhưng bất cứ điều gì):
def self.case_insensitive_find_or_create_by_name(name)
first(:conditions => ['UPPER(name) = UPPER(?)', name]) || create(:name => name)
end
[1]: Vâng, lý tưởng nó sẽ là Artist.find_or_create_by_name(artist_name, :case_sensitive => false)
, nhưng điều này có vẻ khó thực hiện hơn
Tại sao 'Artist.find_or_create_by_name (artist_name,: case_sensitive => false)' khó triển khai hơn? –
Nếu bạn sử dụng MySQL, các kết quả khớp không phân biệt chữ hoa chữ thường. –
@KandadaBoggu vì 'find_or_create_by_name' được tạo động bằng' method_missing'? Có thể nó không khó hơn - làm thế nào bạn sẽ thực hiện nó? –