Ruby on rails 嵌套形式:不应';如果未输入子项的信息,则不保存
我有一个嵌套表单来注册一个新组织和一个成员(1:组织及其成员之间的多个关系)。两者都在模型文件和迁移文件中进行验证 问题:如果没有正确输入组织或成员的信息,我希望表单不要注册任何东西(不是组织或成员) 目前,当我注册一个新组织,但将成员的所有变量保留为空时,它注册该组织时不会显示错误消息,也不会注册任何成员 相反,我希望它也尝试写入该成员,然后生成一条错误消息,因为该成员的某些变量不允许为空。由于该错误,在成员信息正确之前,也不应保存组织 如果我为成员输入了一些信息,这是正确的:如果成员无效,则不会保存组织或成员并给出错误。如果我为成员输入有效信息,而没有为组织输入信息,它也可以正常工作:它会产生错误,并且不保存任何内容。但是,如果我为组织输入有效信息,而没有为成员输入信息,则它不起作用:它不会产生错误,只保存组织 我应该如何更改代码来调整它Ruby on rails 嵌套形式:不应';如果未输入子项的信息,则不保存,ruby-on-rails,ruby,ruby-on-rails-4,testing,nested-forms,Ruby On Rails,Ruby,Ruby On Rails 4,Testing,Nested Forms,我有一个嵌套表单来注册一个新组织和一个成员(1:组织及其成员之间的多个关系)。两者都在模型文件和迁移文件中进行验证 问题:如果没有正确输入组织或成员的信息,我希望表单不要注册任何东西(不是组织或成员) 目前,当我注册一个新组织,但将成员的所有变量保留为空时,它注册该组织时不会显示错误消息,也不会注册任何成员 相反,我希望它也尝试写入该成员,然后生成一条错误消息,因为该成员的某些变量不允许为空。由于该错误,在成员信息正确之前,也不应保存组织 如果我为成员输入了一些信息,这是正确的:如果成员无效,则
观点:
<%= render partial: "registrationform", locals: { url: organizations_path } %>
在您的组织模型中,您可以检查成员
class Organization
validate :check_member
def check_member
if members.empty?
errors.add(:base, 'Member is not present')
end
end
end
使用def check_member时,我收到了错误消息:
未定义的局部变量或
的方法“member”。我还尝试了@member.empty?
和organization.members.empty?
,但都生成了类似的错误消息。每次错误消息指向def check\u member
。我还尝试了验证:member,presence:true
。但是再次出现错误消息#的未定义方法“member”,只是这次指的是控制器中if@organization.save
中的def create
行。在接受之前回答,请使用rails magic:,我还尝试了validates_associated:members
以及validates_associated:members,presence:true
而不是def check_member
。但在这两种情况下,表单都只是在没有成员的情况下保存了组织。重新启动开发服务器没有任何区别。
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
class Organization
validate :check_member
def check_member
if members.empty?
errors.add(:base, 'Member is not present')
end
end
end