0

我有一个模型可以序列化current_values数据库中称为 JSON 的哈希。该模型如下所示:

class Template
  belongs_to :user
  serialize :current_values, JSON
  # has attributes title and description
  # ...
end

现在我想创建一个新的模板,控制器看起来像这样:

class TemplateController < ApplicationController
  # ...
  def create
    template = Template.new(template_params)
    template.save
    # ...
  end

  private

  def template_params
    params.require(:template).permit(:title,
                                     :description,
                                     :current_values)
  end
  # ...
end

如果我使用这个代码params,看起来像这样:

"template" => {
  "title" => "title",
  "description" => "description",
  "current_values" => {
    "foo" => "foo",
    "bar" => "bar"
  }
}

我收到此错误消息:

Unpermitted parameters: current_values

我已阅读http://api.rubyonrails.org/permit上的文档,但我无法弄清楚如何在不使用. 我不知道哪些属性将在 中,因此我无法传递具有允许属性的数组。而且我不想允许一切,因为那样有人可能会覆盖.current_valuespermit!current_values:user_id

4

1 回答 1

0

要解决此问题,您必须更改方法:

def template_params
  params.require(:template).permit(:title,
                                   :description,
                                   :current_values)
end

至:

def template_params
  params.require(:template).permit(:title,
                                   :description).tap do |whitelisted|
    whitelisted[:current_values] = params[:template][:current_values]
  end
end
于 2013-10-13T14:09:43.197 回答