Rails has_one / own_to не сохраняет родительский идентификатор

У меня есть 2 модели, Response и Entry.

Response has_one Entry
Entry belongs_to Response

(Попытка сделать это в режиме просмотра ответа)

В действии контроллера для Show у меня есть:

@response = Response.find(params[:id])
@entry = @response.build_entry(:response_id => @response.id)

Также пробовал только @response.build_entry

Использование гема simple_form и simple_form_for @entry создает запись, но не сохраняет родительский идентификатор (ответ) в записи записи.

Единственный способ сделать это - добавить в форму скрытое поле, чего я действительно не хочу делать ...


person Chris Edwards    schedule 25.09.2012    source источник


Ответы (2)


См. это

Удалить :response_id => @response.id из build

@response = Response.find(params[:id])
@entry = @response.build_entry
@response.save
person Salil    schedule 25.09.2012
comment
Проблема в том, что я не хочу сохранять запись до отправки и проверки формы ... - person Chris Edwards; 25.09.2012
comment
Да, именно поэтому вам следует использовать сборку, если какая-либо проверка response & entry не удалась, другие данные не сохранятся. т.е. это подтвердит, что не будет response без entry и наоборот - person Salil; 25.09.2012
comment
Хорошо, но при этом теперь отображаются сообщения об ошибках проверки при просмотре страницы ответа (т.е. формы) до того, как что-либо будет отправлено, а после отправки у меня все еще есть та же проблема ... - person Chris Edwards; 25.09.2012

Код Салила правильный. Я думаю, вам следует пересмотреть свой подход и перенести проверку данных с контроллера на модель.

person nourish    schedule 25.09.2012
comment
Я не понимаю, моя проверка (т.е. наличие и уникальность) находится в модели :( - person Chris Edwards; 25.09.2012
comment
Ok. Вы сказали, что не хотите сохранять запись до того, как форма будет отправлена ​​и проверена. Когда проверка в модели завершается неудачно, данные не сохраняются, так почему бы хотя бы не попробовать сохранить? - person nourish; 25.09.2012
comment
Я сделал, и это привело меня к третьему комментарию. Проблема заключалась в том, что когда я звонил save, он отображал сообщения проверки перед отправкой. - person Chris Edwards; 25.09.2012
comment
Просто подумайте: может ли этот эпизод RailsCasts помочь исправить ваши проблемы с проверкой? railscasts.com/episodes/ - person nourish; 25.09.2012