Вспомогательный метод для инициализации дочернего объекта для данного класса в Rails

У меня есть вложенная форма для отношения has_many с использованием метода accepts_nested_attributes_for. Если у меня нет дочернего объекта, то вложенная форма не будет отображаться в родительской форме. Поэтому мне нужно инициализировать дочерние объекты. Один из способов сделать это:

# app/helpers/form_helper.rb
module FormHelper
  def setup_user(user)
   3.times { user.tasks.build }
   user
end
# app/views/users/_form.html.erb
<%= form_for(setup_user(user)) do |f| %>
  ...

Как обобщить этот метод для применения к другим вложенным формам? Вот что я придумал, но это не работает

  def initialize_children(parent, children)
    parent.childrens ||= children.class.new
    1.times { parent.childrens.build }
    parent
  end

Спасибо


person AdamNYC    schedule 28.10.2011    source источник


Ответы (1)


Как правило, вы должны делать это в контроллере.

Но давайте придерживаться вашего кода:

def initialize_children(parent, children_sym)
  parent.send(children_sym).build # I don't understand your ||= purpose so I've removed it
  parent
end

Используйте это следующим образом:

initialize_children(user, :tasks)
person apneadiving    schedule 29.10.2011