首页 > 解决方案 > 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 = "…&quot;
    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

标签: ruby-on-railsstrong-parameters

解决方案


呃,用户错误。

tag_list该错误实际上是在一个属性的名称中 - 以它不应该的形式tags,以便嵌套属性正常工作。

我误读了这一行Unpermitted parameters: :authenticity_token, :statement——我猜白名单发生在该日志行之后。

谢谢大家的提问和帮助。


推荐阅读