Rails强参数-接受虚拟属性

Rails strong parameters - accepting the virtual attribute

我有带有持久名称属性和虚拟属性的 ActiveRecord 模型。

class MyModel < ActiveRecord::Base
 validates :name, length: { minimum: 1 }, presence: true

 def virtual_attr=(value)
  # set something
 end

 def virtual_attr
  # get something
 end
end

在我的控制器中,我指定了强参数:

  def my_model_params
    params.permit(:name, :virtual_attr)
  end

当我尝试 create/update 我的模型时,my_model_params 只包含一个名称,而我知道 params[:virtual_attr] 具有我传递给控制器​​的值。它似乎只是被过滤掉了。我做错了什么?

根据这些参数

{"name"=>"New", "virtual_attr"=>{"enable"=>"false", "start"=>"false"}, "controller"=>"my_model", "action"=>"create"}

您需要将强参数更改为:

def my_model_params
  params.permit(:name, virtual_attr: [:enable, :start])
end