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| %> 但上面的
<%= 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