Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 不确定为什么表单中的第一个参数不能包含nil或为空_Ruby On Rails_Ruby_Forms_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 不确定为什么表单中的第一个参数不能包含nil或为空

Ruby on rails 不确定为什么表单中的第一个参数不能包含nil或为空,ruby-on-rails,ruby,forms,ruby-on-rails-4,Ruby On Rails,Ruby,Forms,Ruby On Rails 4,这应该是非常直接的,但我似乎无法确定错误的确切原因 以下是场景: 用户填写表单 在嵌套属性中,用户提交的表单具有3个以上的奖金。这将触发“rescue ActiveRecord::NestedAttribute::TooManyRecords” 在维护以前输入的所有信息时,应将用户重定向回表单 下面是代码的外观: posts/new/_form.html.erb <%= form_for @post, html: { multipart: true } do |f| %> 但上面的

这应该是非常直接的,但我似乎无法确定错误的确切原因

以下是场景:

  • 用户填写表单
  • 在嵌套属性中,用户提交的表单具有3个以上的奖金。这将触发“rescue ActiveRecord::NestedAttribute::TooManyRecords”
  • 在维护以前输入的所有信息时,应将用户重定向回表单
  • 下面是代码的外观:

    posts/new/_form.html.erb

    <%= form_for @post, html: { multipart: true } do |f| %>
    
    但上面的代码在触发“TooManyRecords”错误时会创建“form中的第一个参数不能包含nil或为空”错误。另一方面,“Opps,出了点问题”的错误很好

    提前感谢您抽出时间查看此问题。

    以下是修复方法:

    rescue ActiveRecord::NestedAttributes::TooManyRecords
      flash[:error] = 'Too many bounties.'
      @post = Post.new
      @bounty = Bounty.new
      render :new
    end
    
    在呈现“新”窗体之前,必须初始化@post变量。由于异常发生在Post.new(Post_params)调用中,因此在呈现表单时@Post当前为nil


    此版本将从表单中删除信息。要保留这些信息,您需要调用Post.new,并使用修改后的Post_参数删除奖金。在不知道你的爱人的详细情况下,我无法告诉你那应该是什么样子。

    经过一番尝试和错误,我决定不去寻找营救之路。而是为此创建了自定义验证。否则,除了防止用户添加3个以上的嵌套属性外,还会保留该信息。问题解决了

      validate :bounty_limit
    
      def bounty_limit
        errors.add(:base, "You sir, are generous for planning to give more than 3!") if bounties.size > 3
      end
    

    但是@PeterGoldstein,谢谢你回答我的问题。

    你是说
    post_param
    将在
    rescue
    方法中删除?将
    post_param
    值保存到另一个变量中,然后再次使用它如何?嘿,谢谢,您的输入消除了错误。以下是帖子参数信息:def post_params.require(:post).permit(:name,:url,:story,:postreview,:targets,:image,:description,:category_id,bounties_attributes:[:title,:signups,:description,:_destroy])end
      validate :bounty_limit
    
      def bounty_limit
        errors.add(:base, "You sir, are generous for planning to give more than 3!") if bounties.size > 3
      end