Ruby on rails 嵌套的表单中有许多模型在编辑或表单有验证错误时重复
如果您有以下两种模型,并使用simple_form gem创建表单: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 如果我在没有必填字段(标签)
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