2012-02-04 2 views
1

Есть ли способ использовать find_or_initialize_by, но передать ему хэш params и попросить его найти?Как использовать ActiveRecord Найти динамически, перейдя в Hash of params?

У меня есть форма, которая позволяет пользователю создать автомобиль и указать различные компоненты для этого автомобиля (Car.engine_type, Car.model и т. Д.). Пользователь может использовать только один компонент (Car.engine_type), или они могут представлять кратность. Тем не менее, я хочу, чтобы найти, если автомобиль уже существует с этими компонентами, поэтому я не создаю дубликатов.

Мне известно о find_or_initialize_by, но моя проблема в том, что во время выполнения я не знаю, какие атрибуты модели будут отправлены, поэтому я не могу использовать этот динамический искатель. Одним из сообщений может быть Car => {engine_type = "V6"}. Другой отправкой может быть Car => {num_doors => "4", model => "Ford"}

ответ

1

Я не знаю, можете ли вы сделать это в одной строке, но вам действительно нужно? как насчет чего-то вроде этого:

cars = Car.where(params[:car]) 
if cars.any? 
    @car = cars.first 
else 
    @car = Car.create(params[:car]) 
end 
+1

Забыл о 'where', спасибо! Я использовал «Car.where (params) .exists?» – beeudoublez