Я пытаюсь извлечь информацию из таблицы контактов на основе нескольких подобных условий. До сих пор я придумал следующее:Rails - где с несколькими подобными опциями
conditions = ""
conditions << "email_address LIKE '%#{params[:email_address]}%'" unless params[:email_address].blank?
conditions << " AND first_name LIKE '%#{params[:first_name]}%'" unless params[:first_name].blank?
conditions << " AND last_name LIKE '%#{params[:last_name]}%'" unless params[:last_name].blank?
conditions.sub!(/^AND/, '')
if !conditions.blank?
@contacts = Contact.where(conditions).page(params[:page]).per(10)
else
@contacts = Contact.all.page(params[:page]).per(10)
end
Что мне было интересно ... это лучший способ сделать это? Я бы подумал, что будет хороший способ добавить несколько условий в форме хэша и как-то указать, что я хочу использовать OR/AND и т.п.
Я довольно новичок в рельсах и google не очень помогает.
Спасибо.
Спасибо за подробный ответ. Это похоже на то, что мне нужно. Однако я получаю сообщение об ошибке. неопределенный метод 'scoped '. Можете ли вы просматривать области (как в режиме просмотра базы данных)? Таблица контактов фактически представляет собой представление в другую базу данных. –
['scoped'] (http://apidock.com/rails/ActiveRecord/NamedScope/ClassMethods/scoped) - это простой метод для моделей и ассоциаций ActiveRecord, существовавших с Rails 3, если« Contact »наследует от ActiveRecord :: Основание должно отвечать на 'scoped'. В противном случае вы можете просто использовать '@contacts = Contact' вместо инициализации – meagar
Я довольно новичок в рельсах, поэтому до сих пор не знал об этом :) Это, похоже, не работает. Я думаю, потому что Contact - это представление в базе данных. Мысли? Я реализовал его так же, как вы написали. –