2015-08-22 2 views
0

Я работаю в этом случае. Клиент может иметь N количество тарифов, мне нужно сохранить все.Как манипулировать массивом внутри в activerecord в рельсах?

В моих ClientController он работает так:

def new 
    @Client = Client.new() 

    4.times do 
     tariffs = @Client.tariffs.build 
    end 
    end 

Теперь с точки зрения «зарегистрировать клиентов» Я получил params так:

"client"=>{"name"=>"", 
"gender"=>[""], 
"hair_color_id"=>"", 
"age"=>"", 
"height"=>"", 
"Weight"=>"", 
"orientation"=>"", 
"country_id"=>"", 
"Language"=>[""], 
"service"=>[""], 
"category_id"=>"", 
"description"=>"", 
"tariffs_attributes"=>{"0"=>{"quantity"=>"", 
"duration"=>"Hours", 
"price"=>"", 
"currency_id"=>"1"}, 
"1"=>{"quantity"=>"", 
"duration"=>"Hours", 
"price"=>"", 
"currency_id"=>"1"}, 
"2"=>{"quantity"=>"", 
"duration"=>"Hours", 
"price"=>"", 
"currency_id"=>"1"}, 
"3"=>{"quantity"=>"", 
"duration"=>"Hours", 
"price"=>"", 
"currency_id"=>"1"}, 
"4"=>{"quantity"=>"", 
"duration"=>"Hours", 
"price"=>"", 
"currency_id"=>"1"}, 
"5"=>{"quantity"=>"", 
"duration"=>"Hours", 
"price"=>"", 
"currency_id"=>"1"}, 
"6"=>{"quantity"=>"", 
"duration"=>"Hours", 
"price"=>"", 
"currency_id"=>"1"}, 
"7"=>{"quantity"=>"", 
"duration"=>"Hours", 
"price"=>"", 
"currency_id"=>"1"}}, 
"homeshow"=>"0", 
"planetariff"=>"0", 
"profileclient"=>"0", 
"city_id"=>"", 
"phonenumber"=>"", 
"fullname"=>"", 
"user"=>{"email"=>"[email protected]", 
"password"=>"[FILTERED]", 
"password_confirmation"=>"[FILTERED]"}}, 
"commit"=>"Register", 
"locale"=>"en"} 

Я хочу, чтобы получить доступ к массиву «tariffs_attributes »и сохраните содержимое там.

Я попытался с этой линией внутри def create

@tariffs = Tariff.create(params[:tariffs_attributes]) 

, но мне нужно обновить/добавить идентификатор клиента в каждом регистре, например:

Я попытался с:

params[:client][tariffs_attributes].each do |l| 
     @tariff = Tariff.new(l) 
     @tariff.update_attribute(:client_id, @client_id) 
     @tariff.save 
end 

Любые идеи или предложения? Спасибо заранее

+0

Итак, вы хотите создать тарифы, когда инициализируется регистрация клиента, а не когда клиент зарегистрирован? Я не могу понять, чего вы пытаетесь достичь. –

ответ

1

Вам нужно это:

params["client"]["tariffs_attributes"].each do |client_id, tariff_attributes| 
     @tariff = Tariff.new(tariff_attributes) 
     @tariff.update_attribute(:client_id, client_id) 
     @tariff.save 
    end 

Здесь вы перекручивание через все tariffs_attributes, который является хэш имеющий key как client_id и значение является tariff_attributes.

Также, глядя на ваш params хэш, все его keys и values являются символами строки NOT. Итак, вам нужно сделать: params["client"]["tariffs_attributes"], чтобы захватить все tariffs_attributes из params хеш. Если вы используете, символ :client, вот так: params[:client][:tariffs_attributes], он не будет работать и ничего не получит/ноль.