2013-03-12 1 views
1

Я пытаюсь использовать update_attributes и accepts_nested_attributes_for для обновления некоторых дочерних объектов (days_events) от родительского (локального) контроллера.update_attributes не вставляет все атрибуты

Все выглядит хорошо в параметрах hash, но когда я пытаюсь использовать assign_attributes или update_attributes, фактические даты не обновляются. Первая запись days_event создается в базе данных успешно, как и в случае с event_id и location_id, но start_date и Поля end_date пусты.

В полях даты также нет ограничений по модели.

Вот код в моем местоположении (родительский) контроллер:

def update 
    logger.debug('PARAMS HASH********'+params.to_s) 

    @total_forms=params[:total_forms].to_i 
    @current_form=params[:current_form].to_i 

    @location = Location.find(params[:id])  

    @location.update_attributes(params[:location]) 
    end 

Вот мой PARAMS хэш:

{ 
"utf8"=>"Γ£ô", 
"_method"=>"put", 
"authenticity_token"=>"Mz2GzRmqxrygy01d2LdkE6ZZY+fJK1PSlVhFKlVUme8=", 
"location"=>{ 
    days_events_attributes" 
=>{ 
    "0"=>{ 
     "start_date"=>"03/14/2013", 
     "end_date"=>"03/14/2013", 
     "_destroy"=>"false", 
     "event_id"=>"588" 
     }, " 
    1"=>{" 
     start_date"=>"", 
     "end_date"=>"", 
     "_destroy"=>"1", 
     "event_id"=>"588" 
     }, 
    "2"=>{ 
     "start_date"=>"", 
     "end_date"=>"", 
     "_destroy"=>"1", 
     "event_id"=>"588" 
     } 
    } 
}, 
"total_forms"=>"2", 
"current_form"=>"0", 
"commit"=>"Add Date s for Next Location", 
"action"=>"update", 
"controller"=>"locations", 
"id"=>"871" 
} 
+1

Какая БД вы используете? Проверьте формат даты, MySQL, например, использует формат YYYY-MM-DD, если вы введете неверный формат, он просто отклонит его. – sergelerator

+0

Можете ли вы опубликовать код модели для отношений и вложенных атрибутов? – Sam

+1

Посмотрите на свой attr_accessible – apneadiving

ответ

2

Проверьте формат даты, MySQL, например, использует формат YYYY-MM-DD , если вы введете неверный формат, он просто отклонит его.

Если вы хотите нормализовать формат даты независимо от того, что вы получаете в качестве ввода, я бы предложил добавить к вашей модели крючок и сделать его там. Проверьте ответ на this question за предложение, он не касается дат (он показывает, как отформатировать атрибут цены), но он должен дать вам представление о том, что вам нужно делать.

Если вам нужна помощь в форматировании даты, напишите здесь комментарий, и я приеду к нему, как только смогу.

Надеюсь, это поможет :)

+0

Спасибо! Я попробовал добавить before_validation к модели days_event, и я получаю ошибку nilClass. Какие-либо предложения? – turbo2oh

+0

Я получаю только ошибку nilClass, когда дата является форматом, который не будет работать ex. 3/15/2013 вместо 4/4/2013 .. – turbo2oh

+0

Получаете ли вы эту ошибку при доступе к атрибуту даты? Я просто запускал некоторые тесты, и похоже, что установка недопустимого формата даты в атрибуте «Дата» приводит к тому, что модель отклоняет значение. Это должно быть обработано в контроллере ... (oh noes) :) Я думаю, что 'before_filter' в вашем' ApplicationController' мог форматировать ваши даты. Но если у вас есть контроль над кодом на стороне клиента, попробуйте установить там правильный формат, мне не очень нравится идея добавления такого шума в ваш 'ApplicationController' – sergelerator