Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 嵌套形式:不应';如果未输入子项的信息,则不保存_Ruby On Rails_Ruby_Ruby On Rails 4_Testing_Nested Forms - Fatal编程技术网

Ruby on rails 嵌套形式:不应';如果未输入子项的信息,则不保存

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:组织及其成员之间的多个关系)。两者都在模型文件和迁移文件中进行验证 问题:如果没有正确输入组织或成员的信息,我希望表单不要注册任何东西(不是组织或成员) 目前,当我注册一个新组织,但将成员的所有变量保留为空时,它注册该组织时不会显示错误消息,也不会注册任何成员 相反,我希望它也尝试写入该成员,然后生成一条错误消息,因为该成员的某些变量不允许为空。由于该错误,在成员信息正确之前,也不应保存组织 如果我为成员输入了一些信息,这是正确的:如果成员无效,则

我有一个嵌套表单来注册一个新组织和一个成员(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