Rails如何使用复选框创建多个对象

时间:2010-12-19 18:18:22

标签: ruby-on-rails

我想在Indhold模型中创建多个Indhold。但是当我提交时,我只获得1个Indhold参数,它只创建了1个indhold,即使我已经检查了几个复选框。 我希望它创建新的Indhold宽度那些Check Checkbox。 我的独立形式:

<%= 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

祝你好运, Rails初学者

1 个答案:

答案 0 :(得分:2)

首先,将indholds [navn]更改为在checkbox标签中隐藏[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

这不是新标准的使用;我会将动作更改为multiple_new或类似。您还必须在表单中使用@errors而不是@indhold.errors。