Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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 On Rails 4_Ruby On Rails 5_Simple Form - Fatal编程技术网

Ruby on rails 嵌套的表单中有许多模型在编辑或表单有验证错误时重复

Ruby on rails 嵌套的表单中有许多模型在编辑或表单有验证错误时重复,ruby-on-rails,ruby-on-rails-4,ruby-on-rails-5,simple-form,Ruby On Rails,Ruby On Rails 4,Ruby On Rails 5,Simple Form,如果您有以下两种模型,并使用simple_form gem创建表单: class Poll < ApplicationRecord has_many :poll_options, dependent: :destroy accepts_nested_attributes_for :poll_options end class PollOption < ApplicationRecord belongs_to :poll end 如果我在没有必填字段(标签)

如果您有以下两种模型,并使用simple_form gem创建表单:

class Poll < ApplicationRecord
    has_many :poll_options, dependent: :destroy
    accepts_nested_attributes_for :poll_options
end

class PollOption < ApplicationRecord
    belongs_to :poll
end
如果我在没有必填字段(标签)的情况下故意提交此内容,页面将重新加载4个选项,然后我再次提交6个选项,以此类推。出于某种原因,它会继续向表单中添加两个选项

此外,编辑轮询会加载4个选项,而不是数据库中保存的2个选项(它会显示所有可能的选项组合)

你知道为什么会这样吗

我的头撞了两天墙。任何帮助都将不胜感激

试试这个:

private
def poll_params
  params.require(:poll).permit(poll_options_attributes: [:id, :destroy, ...other poll option params])
end
更新

def new
  @poll = Poll.new
  @poll.poll_options.build unless @poll.poll_options.any?
end
更新2
simple\u表单
helper更改为
simple\u嵌套表单
(不要忘记应用程序.js中的js)


对不起,我已经不知道了。

啊,终于明白了。这是解决方案

在控制器操作中,构建它两次:

2.times do
  @poll.poll_options.build
end
在视图中,仅循环一次。显然,您不能使用两个循环来获取嵌套表单的两个实例:

= f.simple_fields_for :poll_options do |options|
    = options.input :label

请出示控制器允许的参数。您是否已将
:id
添加到
轮询选项属性中
?@cnnr已用参数更新。我尝试了
params.fetch(:poll,{}).permit(:poll\u options\u attributes)
params.require(:poll).permit
你的更新方法是什么样子的?如果我提交了一个没有一些必填字段的
新的
表单,返回表单时显示了所需的错误,并且仍然会再次重复选项x2,除非@poll.poll\u options.build,否则会遇到同样的问题。有吗?。。还是同一个问题:(@Jacob关于表单助手的最新更新。恐怕就这些。非常感谢您的帮助!这也没有解决问题,但我非常感谢您的帮助!
2.times do
  @poll.poll_options.build
end
= f.simple_fields_for :poll_options do |options|
    = options.input :label