2

我必须提交多个表单,我遵循了这篇文章的建议:如何从 Rails 的同一页面提交多个重复的表单 - 最好使用一个按钮

注意我对 Rails/编程还是很陌生,我的一些做事方式可能并不理想。

这是我的看法:

 = form_tag ([@event, @registration]) do
    - x.times do
      = render 'multi_form'
    = submit_tag "Submit registrations"

表格(注意有更多字段):

- hidden_field_tag :event_id, :value => @event.id

.control-group
  = label_tag :title
  .controls
    = select("registrations[][title]", :registration, Registration::TITLE)

.control-group
  = label_tag :first_name
  .controls
    = text_field_tag "registrations[][first_name]"

.control-group
  = label_tag :last_name
  .controls
    = text_field_tag "registrations[][last_name]"

.control-group
  = label_tag :email
  .controls
    = text_field_tag "registrations[][email]"

控制器:

  def create
    array_number = 0
    x.times do
      @registration = Registration.new(params[:registrations][array_number])
      @registration.save
      UserMailer.registration_user_notify(@event, @registration).deliver
      array_number = array_number + 1
    end
    respond_to do |format|
      format.html {redirect_to thank_you_event_registrations_path(@event)}
    end
  end

提交时,在某种程度上,它似乎在做正确的事情,因为它会向 x 个唯一的电子邮件地址发送一封电子邮件,这让我认为 @registration 在每个循环中都包含正确的详细信息 - 它没有保存到数据库中然而。我可以看到所有参数都在日志文件中,除了 :title 似乎做错了什么(见下文:但我稍后会重点关注),我现在想要它做的主要事情是运行每个数组并将其保存为新条目。

日志:

Parameters: {"utf8"=>"â", "authenticity_token"=>"BQXm5fngW27z/3Wxy9qEzu6D8/g9YQIfBL+mFKVplgE=", "event_id"=>"7", "registrations"=>[{"title"=>{"registration"=>"Mrs"}, "first_name"=>"Person", "last_name"=>"One", "email"=>"charl@privatelabel.co.za"...

我希望我提供的信息足够,任何建议将不胜感激。

谢谢!

编辑:

@iblue

它成功了!这是一个验证错误,它将所有内容保存到不同的行中。非常感谢你!

如果可以的话,还有一件事,知道应该如何格式化 :title 表单部分以返回参数:

"title"=>"Mrs",

相对于:

"registrations"=>[{"title"=>{"registration"=>"Mrs"},

再次感谢!

4

1 回答 1

0

您没有检查是否@registration.save实际保存了记录。它可以返回truefalse。我想它只是默默地失败了。

如果你使用@registration.save!,它会在出现任何问题时引发异常。我想那里存在某种验证错误。

于 2012-07-02T19:38:45.397 回答