无效提交后,嵌套注册表单无法正确呈现

时间:2015-05-11 16:11:04

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个组合/嵌套注册表单,它注册一个新组织和一个成员(两个模型具有1:多关系)。

当向表单提交无效信息时(即,我填写组织的无效信息而该成员根本没有信息),它应该再次使用错误消息呈现组合的注册表单。 在此方案中,在提交无效信息后,它仅呈现注册表单的一部分以注册组织(没有表单的成员部分)。如果我为组织和组织输入无效信息成员,然后它确实正确地呈现完整的组合形式。

有没有人知道代码有什么问题?

控制器包括:

  def new
    if (logged_in?)
      flash[:danger] = "You're already logged in"
      redirect_to root_url
    end
    @organization = Organization.new
    @member = @organization.members.build
  end

  def create
    @organization = Organization.new(organizationnew_params)
    if @organization.save
      @organization.members.each do |single_member|
        single_member.send_activation_email
      end
      flash[:success] = "Please check your email to activate your account."
      redirect_to root_url
    else                            
      render 'new'    # This is the relevant render line.
    end
  end

新视图:

<%= render partial: "registrationform", locals: { url: organizations_path } %>

部分(注册表格):

<% if local_assigns.has_key? :url %>

  <%= form_for @organization, url: url do |f| %>
    <%= render 'shared/error_messages', object: f.object %>
    <h4>Details of the organization:</h4>
    <%= f.text_field :name, class: 'form-control' %>

    <%= f.fields_for :members do |p| %>
      <h4>Your personal details:</h4>
      <%= p.email_field :email, class: 'form-control' %>
      <%= p.password_field :password, class: 'form-control' %>
      <%= p.password_field :password_confirmation, class: 'form-control' %>
    <% end %>
    <%= f.submit "Sign up" %>
  <% end %>

<% else %>
  <%= flash.now[:danger] = "Error: no url defined" %>
<% end %>

路线:

get 'signup/organization' => 'organizations#new', as: 'register'

1 个答案:

答案 0 :(得分:1)

在您的新操作中,您正在执行@organization.members.build,这不在您的编辑操作中。验证失败时,它将呈现您的新操作,但不会运行您的新操作。您可以尝试将@organization.members.build放在create操作的else子句中,例如:

else
  @organization.members.build if @organization.members.blank?
  render 'new'
end