simple_fields_for form_builder.object возвращает новый объект?

Я пытаюсь понять, как вы должны получать доступ к объектам с помощью Rails Form Builder (или, в данном случае, simple_form).

Я передаю объект, как описано в http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for примерно так:

- @document.sections.each do |section|
  = f.simple_fields_for :sections, section do |section_form|
    = render 'section_fields', :f => section_form

Однако, когда я вызываю f.object внутри частичного, я получаю «новый» объект Section, содержащий нулевой идентификатор и т. д., нарушая мой путь link_to.

Даже передача переменных «стандартным» способом кажется нарушенной, например:

- @document.sections.each do |section|
  = f.simple_fields_for :sections, section do |section_form|
    = render 'section_fields', :f => section_form, :foo => section

наличие foo undefined внутри партиала.

Как я должен получить доступ к предполагаемому объекту, для которого создается форма, с использованием ассоциации fields_for has_many?


person HaaR    schedule 07.10.2012    source источник


Ответы (2)


Я думаю, вам нужно создать связанный объект и изменить код следующим образом:

- @document.sections.build if @document.sections.empty?
  = f.simple_fields_for :sections, @document.sections do |section_form|
   = render 'section_fields', :f => section_form
person zolter    schedule 07.10.2012
comment
Я использую это только для отображения форм для текущих объектов, а новые создаются с помощью link_to_add_association, поэтому section_form.object никогда не является «новым» или нулевым объектом. Я начинаю думать, что form.object просто возвращает объект для класса этой формы, а не объект для рассматриваемой формы. Если да, то как еще вы получите фактический объект, если вы не можете передать значение частичному, как обычно. - person HaaR; 07.10.2012

Оказывается, метод Cocoon 'link_to_add_association' генерировал новый объект, который нарушал link_to, включавший f.object, поскольку в тот момент объект явно не существовал.

Просто добавив «если f.object.new_record?» игнорирует новую (скрытую) запись, которую генерирует Cocoon.

person HaaR    schedule 07.10.2012