ruby-on-rails - Rails 5 强参数不允许主模型
问题描述
这让我发疯。
我有一个相对简单的设置,但由于某种原因,我试图通过的主要模型是不允许的。
日志如下所示:
Started POST "/statements" for ::1 at 2019-12-05 23:19:37 +1300
Processing by StatementsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"O4Ye+SFx7kGUceDKJlXs8A0FlH/e7r08xpLpDuICHmgAqaxw/e0UV8AR1pUZGhGlWKOcePtt3LXM7rsXXNTbGw==", "statement"=>{"content"=>"…all people are created equal.", "tags"=>"politics, equality", "parent_id"=>"dagCzw"}, "commit"=>"Submit variant and agree"}
Unpermitted parameters: :authenticity_token, :statement
我想做的一件事在哪里statement
——但这是不允许的,并且创建的语句总是充满 nil 属性。
感谢您对此的任何帮助!
删除希望无关的位:
语句.rb
class Statement < ApplicationRecord
新的.html.erb
<%= render partial: "statements/partials/new_statement_form",
locals: {statement: @statement, parent: @parent} %>
_new_statement_form.html.erb
<%= form_for(statement) do |f| %>
statements_controller.rb
def new
Rails.logger.debug "\n\n-------- new ---------\n\n"
@statement = Statement.new
@content = "…"
if params[:parent].present?
@parent = Statement.find_by_hashid(params[:parent])
@content += "#{@parent.content}."
end
end
.
.
.
def create
if create_params[:parent_id]
Rails.logger.debug "\n\nCreate child\n\n"
@statement = Statement.find_by_hashid(create_params[:parent_id]).children.create(create_params[:statement])
else
Rails.logger.debug "\n\nCreate root\n\n"
@statement = Statement.new(create_params[:statement])
end
.
.
.
def create_params
params.require(:statement).permit(:content, :tags, :parent_id)
end
解决方案
呃,用户错误。
tag_list
该错误实际上是在一个属性的名称中 - 以它不应该的形式tags
,以便嵌套属性正常工作。
我误读了这一行Unpermitted parameters: :authenticity_token, :statement
——我猜白名单发生在该日志行之后。
谢谢大家的提问和帮助。
推荐阅读
- xml - 如何将 Beautiful Soup 4 Tag 对象转换为字符串?
- javascript - 如果分配的媒体在视口中,如何将类添加到链接?
- php - HTML输入名称属性作为数组 - 如何访问laravel中的值
- python - 如何使用flask从html表单获取测试输入到另一个python脚本?
- vba - MS Access 2007 上的 MS Graph 图表中的图表区域有时为空白
- javascript - chartJS 水平可扩展
- java - AnimatorSet 在顺序播放时停止
- python - 如何使用python在数据框中找到最早的连续日期?
- regex - 正则表达式提取整数的问题
- python - 岭回归梯度下降错误(Python)