2015-02-15 2 views
3

В настоящее время я работаю над проектом в rails 4, в котором у меня есть пользовательская страница example.com/username, но он находит только запись, если я использую имя пользователя в правильном случае, как я могу выполнять регистр без учета регистра в активных рельсах записи. Проверьте мой код нижеНечувствительный к регистру активный запрос записи в rails-4

@user = User.find_by_username(params[:username].downcase)

ответ

2

вам придется использовать что-то похожее на where("username ILIKE ?"). ILIKE или аналогичный синтаксис зависит от вашей базы данных.

+0

Это сработало .. спасибо – Mr94

1

Другой вариант может быть:

def self.search(query) 
    where("lower(name) LIKE lower(?)", "%#{query}%") 
end 

Это будет работать в SQLite или PostgreSQL.

+0

Синтаксис «% # {query}%» соответствует любой строке, содержащей значение запроса, которое будет работать во многих случаях. Однако, если вы пытаетесь сопоставить только точные значения без учета регистра, это было бы предпочтительнее/быстрее: 'where (" lower (name) = lower (?) "," # {Query} ")'. – lgants

0

Вы можете использовать таблицы Arel.

# Suppose the target username in DB is 'FooBAR'. 
t = User.arel_table 
@user = User.find_by(t[:username].matches 'foobar') 

Найдет пользователей с именами пользователей, как 'FooBar', 'Foobar', 'FOOBAR' и так далее.

Подробнее здесь: https://github.com/rails/arel.

Смежные вопросы