我想在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初学者
答案 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。