Rails Как создать несколько объектов с флажками - PullRequest
1 голос
/ 19 декабря 2010

Я хочу создать несколько моделей Indhold in Indhold. Но когда я отправляю, я получаю только 1 параметр Indhold, и он создает только 1 Indhold, даже если я установил несколько флажков. Я хочу, чтобы он создал новую ширину Indhold этих флажков. Моя внутренняя форма:

<%= form_tag({:action => 'create'}, {:multipart => true} ) %>

   <% for indhold in Indhold.find(:all) %>
   <%= check_box_tag( "indholds[navn]", indhold.navn ) %>
    <%= indhold.navn %><br /> 
     <% end %>

 </div> 
  <div class="actions">
    <%= submit_tag( "Submit" ) %> 
  </div>

Мой внутренний контроллер:

  def new
    @indhold = Indhold.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @indhold }
    end
  end

  def create
    @indhold = Indhold.new(params[:indhold])
    respond_to do |format|
      if @indhold.save
        format.html { redirect_to(@indhold, :notice => 'Indhold was successfully created.') }
        format.xml  { render :xml => @indhold, :status => :created, :location => @indhold }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @indhold.errors, :status => :unprocessable_entity }
      end
    end

С уважением, Начинающий рельс

1 Ответ

2 голосов
/ 20 декабря 2010

Во-первых, измените indholds [navn] на indholds [navn] [] в теге флажка.Это отправит несколько значений в params.Но Indhold.new собирается создать только одну новую запись.Вам нужно сделать что-то подобное для создания нескольких записей:

@indholds = []
@errors = []
params[:indhold][:navn].each do |navn|
  indhold = Indold.new(:navn => navn)
  if indhold.valid?
    @indholds << indhold.save
  else
    @errors += indhold.errors
  end
end

Это не совсем стандартное использование new;Я бы изменил действие на multip_new или подобное.Вам также придется использовать @errors вместо @ indhold.errors в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...