Ruby on rails 接受\u嵌套的\u属性\u以不创建嵌套资源?
我有一首歌,Ruby on rails 接受\u嵌套的\u属性\u以不创建嵌套资源?,ruby-on-rails,forms,nested-forms,nested-attributes,Ruby On Rails,Forms,Nested Forms,Nested Attributes,我有一首歌,有很多测验,一个测验有很多问题 quick.rb: class Quiz < ActiveRecord::Base belongs_to :track has_many :questions, dependent: :destroy accepts_nested_attributes_for :questions end 提交时的参数: {"utf8"=>"✓", "authenticity_token"=>"...", "quiz"=> {
有很多
测验,一个测验有很多
问题
quick.rb:
class Quiz < ActiveRecord::Base
belongs_to :track
has_many :questions, dependent: :destroy
accepts_nested_attributes_for :questions
end
提交时的参数:
{"utf8"=>"✓",
"authenticity_token"=>"...",
"quiz"=> {
"name"=>"Test Quiz",
"questions_attributes"=> {
"0"=>{"content"=>"This is question 1?"},
"1"=>{"content"=>"This is question 2?"},
"2"=>{"content"=>""}
}, "user_id"=>"1",
"order"=>"3"
}, "commit"=>"Submit",
"permalink"=>"1-basics"}
当我按submit时,将创建测验,但不会创建问题
新参数:
def quiz_params
params.require(:quiz).permit(:name, :information, :order,
:permalink, :user_id,
questions_attributes: [:id, :content, :_destroy, answers_attributes: [:id, :content, :_destroy]] )
end
我认为问题出在
接受
的嵌套属性上:
reject_if: proc { |q| q['name'].blank? }
如果内容
为空(考虑请求参数),您可能应该拒绝实例:
问题解决了。嵌套参数需要用花括号括起来:
def quiz_params
params.require(:quiz).permit(:name, :information, :order,
:permalink, :user_id,
{ questions_attributes: [:id, :content] })
end
删除它完全没有什么区别,错误在添加之前仍然发生。不可能,伙计,我仍然认为您的问题是拒绝使用空名称的问题,这是有意义的,因为您不允许在问题属性中使用名称:[:id,:content],并且实例被拒绝(已测试Rails 4.0.2)。我认为这不是原因,但是<代码>拒绝>如果< /Cord>选项拒绝所有问题,因为空白名称。除非您有一些初始值设定项或回调函数更改了
name
属性。@markets不能这样做,因为我已经说过,删除该属性后,错误仍然会发生。您能再试一次吗?在请求之前重新启动服务器。无论如何,我相信如果您添加reject_if:proc{q | q['content'].blank?}
(或一些模型验证)会更好。我在Rails 4.0.2中重新创建了这个测试,它正如我所说的那样工作。我现在也转到了答案,强参数被添加到页面底部,我重新启动了服务器并使用了您建议的proc
,但仍然不工作。您使用的Rails版本是什么?非常奇怪,它对我来说是4.0.2。我还发现了这个链接,params似乎定义得很好。
reject_if: proc { |q| q['name'].blank? }
reject_if: proc { |q| q['content'].blank? }
def quiz_params
params.require(:quiz).permit(:name, :information, :order,
:permalink, :user_id,
{ questions_attributes: [:id, :content] })
end