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

У меня есть вложенная форма для отношения 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

Спасибо

1 Ответ

1 голос
/ 29 октября 2011

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

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

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)
...