我有一个嵌套表单来注册一个新组织和一个成员(1:组织与其成员之间的关系很多)。两者都在模型文件和迁移文件中都有验证。
问题:如果没有正确输入两者的信息,我希望表单不要注册任何内容(非组织或成员)。
目前,当我注册一个新组织但将该成员的所有变量都留空时,它会在没有错误消息的情况下注册该组织并且它不会注册任何成员。
相反,我希望它也尝试编写成员,然后生成错误消息,因为成员的某些变量不允许为空。由于该错误,它不应该保存组织,直到成员信息也是正确的。
如果我输入成员的某些信息,这确实可以正常工作:如果该成员无效,则不会保存组织或成员并提供错误。如果我输入成员的有效信息并且没有组织信息,它也可以正常工作:它产生错误并且不保存任何内容。但是如果我为组织输入有效信息而没有成员信息则不起作用:它不会产生错误并仅保存组织。
如何更改代码以进行调整?
观点:
<%= render partial: "registrationform", locals: { url: organizations_path } %>
部分/表格:
<%= 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.text_field :username, class: 'form-control' %>
<%= 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", class: "formbutton btn btn-default" %>
<% end %>
控制器:
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(new_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
@organization.members.build if @organization.members.blank?
render 'new'
end
end
private
def new_params
params.require(:organization).permit(:name,
members_attributes: [:email,
:username,
:password,
:password_confirmation
])
end
答案 0 :(得分:2)
在您的组织模型中,您可以检查成员
class Organization
validate :check_member
def check_member
if members.empty?
errors.add(:base, 'Member is not present')
end
end
end