NoMethodError: undefined method `permit' for #<Hash:0x007facebc78c98> in Rails Minitest
NoMethodError: undefined method `permit' for #<Hash:0x007facebc78c98> in Rails Minitest
我在 rails Minitest 中收到强参数的 permit
错误。
当我 运行 通过正常流程(除了测试)时,这工作正常
每当我 运行 我的测试它给我这个奇怪的错误。
为什么这只在测试时不起作用
parameter
@params_return_type = {:client_notes_and_action_items=>[{"notes_action_type"=>"return_help", "title"=>"test title", "description"=>"", "to_do_action_items_attributes"=>{"0"=>{"linked_item_id"=>"987", "linked_item_type"=>"client_purchases_shipping_detail", "initial_request"=>"true"}}, "estimated_completion"=>'Mon, 30 Mar 2020', "assigned_to"=>"45", "assigned_by"=>"41"}],"client_id"=>"76576"}
运行测试时出错
NoMethodError: undefined method `permit' for #<Hash:0x007facebc78c98>
你的意思是?打印
this is my strong parameter
私人
def self.client_notes_and_action_item_params(params)
params.permit( :client_id, :notes_action_type, :category, :description, :user_id, :image,
:comments, :status, :estimated_completion, :actual_completion, :title,
to_do_action_items_attributes: [:id, :linked_item_id, :linked_item_type, :deleted,
:initial_request])
end
我的api代码就是这样
params[:client_notes_and_action_items].each do |client_notes_and_action_item|
ClientNotesAndActionItem.transaction do
action_item = ClientNotesAndActionItem.new(client_notes_and_action_item_params(client_notes_and_action_item))
代码的最后一行在这里中断
知道问题出在哪里。
如果强参数是一个问题那么我应该得到这个错误,正常流程工作正常
只有 Minitest 测试中断。
您需要将 Hash
对象转换为 ActionController::Parameters
对象,因为 permit
是 ActionController::Parameters
的方法
params = {:client_notes_and_action_items=>[{"notes_action_type"=>"return_help", "title"=>"test title", "description"=>"", "to_do_action_items_attributes"=>{"0"=>{"linked_item_id"=>"987", "linked_item_type"=>"client_purchases_shipping_detail", "initial_request"=>"true"}}, "estimated_completion"=>'Mon, 30 Mar 2020', "assigned_to"=>"45", "assigned_by"=>"41"}],"client_id"=>"76576"}
@params_return_type = ActionController::Parameters.new(params)
试一试。
我在 rails Minitest 中收到强参数的 permit
错误。
当我 运行 通过正常流程(除了测试)时,这工作正常
每当我 运行 我的测试它给我这个奇怪的错误。
为什么这只在测试时不起作用
parameter
@params_return_type = {:client_notes_and_action_items=>[{"notes_action_type"=>"return_help", "title"=>"test title", "description"=>"", "to_do_action_items_attributes"=>{"0"=>{"linked_item_id"=>"987", "linked_item_type"=>"client_purchases_shipping_detail", "initial_request"=>"true"}}, "estimated_completion"=>'Mon, 30 Mar 2020', "assigned_to"=>"45", "assigned_by"=>"41"}],"client_id"=>"76576"}
运行测试时出错
NoMethodError: undefined method `permit' for #<Hash:0x007facebc78c98>
你的意思是?打印
this is my strong parameter
私人
def self.client_notes_and_action_item_params(params)
params.permit( :client_id, :notes_action_type, :category, :description, :user_id, :image,
:comments, :status, :estimated_completion, :actual_completion, :title,
to_do_action_items_attributes: [:id, :linked_item_id, :linked_item_type, :deleted,
:initial_request])
end
我的api代码就是这样
params[:client_notes_and_action_items].each do |client_notes_and_action_item|
ClientNotesAndActionItem.transaction do
action_item = ClientNotesAndActionItem.new(client_notes_and_action_item_params(client_notes_and_action_item))
代码的最后一行在这里中断
知道问题出在哪里。 如果强参数是一个问题那么我应该得到这个错误,正常流程工作正常 只有 Minitest 测试中断。
您需要将 Hash
对象转换为 ActionController::Parameters
对象,因为 permit
是 ActionController::Parameters
params = {:client_notes_and_action_items=>[{"notes_action_type"=>"return_help", "title"=>"test title", "description"=>"", "to_do_action_items_attributes"=>{"0"=>{"linked_item_id"=>"987", "linked_item_type"=>"client_purchases_shipping_detail", "initial_request"=>"true"}}, "estimated_completion"=>'Mon, 30 Mar 2020', "assigned_to"=>"45", "assigned_by"=>"41"}],"client_id"=>"76576"}
@params_return_type = ActionController::Parameters.new(params)
试一试。