我有一个组合/嵌套注册表单,它注册一个新组织和一个成员(两个模型具有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'
答案 0 :(得分:1)
在您的新操作中,您正在执行@organization.members.build
,这不在您的编辑操作中。验证失败时,它将呈现您的新操作,但不会运行您的新操作。您可以尝试将@organization.members.build
放在create
操作的else子句中,例如:
else
@organization.members.build if @organization.members.blank?
render 'new'
end