ruby on rails-使用hash.keys、hash.values更新对象时出现禁止属性错误



当我尝试更新我的一个对象时,我得到了以下错误:

ActiveModel::ForbiddenAttributesError
Extracted source (around line #21):
      def sanitize_for_mass_assignment(attributes)
        if attributes.respond_to?(:permitted?) && !attributes.permitted?
          raise ActiveModel::ForbiddenAttributesError
        else
          attributes
        end

控制器中的逻辑如下:

  params["EmployeeSchedules"].each do |key,value|  #this gets the params for each scheduleID values = 1=> { "hrs" => 3}}
   @update_hash = value
  end
  logger.debug "@params = #{@update_hash}"
  logger.debug "keys= #{@update_hash.keys} values = #{@update_hash.values}"
   if EmployeeSchedule.update(@update_hash.keys, @update_hash.values)
   #if EmployeeSchedule.update([19,67], [{"hrs" => "1"}, {"hrs" =>"2"}])

如果我使用这一行而不是带有@update_hash.keys@update_hhash.values的那一行,即使键/值是更新哈希中键/值的子集,它也能工作。

if EmployeeSchedule.update([19,67], [{"hrs" => "1"}, {"hrs" =>"2"}])  #this works
if EmployeeSchedule.update(@update_hash.keys, @update_hash.values) #this gives the error above

参数和哈希值摘要

参数:{"utf8"=>"✓","authenticity_token"=>"Tveh6o9jTvCkrFHBaEijBwCmb/yCqOtzfMr0YRVK8JPfeMGGD6IsTgzRarAdLKcGAAbRW1Iz6wjzGZ9o1gSr9Q==","EmployeeSchedules"=>{"schedules"=>}{"59"=>{"27"=>{"hrs"=>"},"75"=>{"hrs"=>"},"115"=>"hr"=>""},"64"=>"hours"=>"}"24"=>"hour"=>"(,"72"=>"}、"112"=>"小时"=>"}、"32"=>"h"=>"、"80"=>"},"120"=>{"hrs"=>"}、"60"=>{"hrs"=>"}、"20"=>{"}、"71"=>{"hrs"=>"}、"111"=>"hrs"=>"}、"31"=>{"hrs">>"}、"79"=>"hr"=>"}"119"=>"、"58"=>"hr"=>"}"、"18"=>"hours"=>"}"、"66"=>"hhs"=>""、"106"=>"hour"=>"、"26"=>">"},"74"=>{"hrs"=>"},"114"=>{"hrs">>"},"65"=>{"hrs"=>"},"25"=>{

@params={"59"=>{"hrs"=>"}、"19"=>"hrs"=>""}、"67"=>"}、"107"=>"hr"=>"}"、"27"=>"小时"=>"、"75"=>{"hrs"/>"、"115"=>"、"64"=>"hr"=>"(、"24"=>"hr"=>"、"72"=>">"}、"112"=>{"hrs"=>"}、"32"=>"hrs"=>""}、"80"=>{"hrs">>"}、"120"=>{"hrs"=>"}、"60"=>{"hrs">>"}、"20"=>{"hrs=>"},"116"=>{"hrs"=>"}、"63"=>"hrs"=>"}、"23"=>{"hrs">>"}、"71"=>{"hrs">>"}、"111"=>"}、"31"=>{"hrrs"=>""},"79"=>{"hrs,"66"=>{"hrs"=>"},"106"=>"hrs"=>""},"26"=>{"hrs"/>"},"74"=>"h"=>"}","114"=>"hr"=>"(,"65"=>"小时"=>"}","25"=>"时"=>","73"=>">>"}、"113"=>"hhs"=>"","33"=>"hrrs"=>"},"81"=>{"hrs"=>"},"121"=>{"hrs"=>"}}

哈希值{59=>{"hrs"=>"}、19=>{"hrs"=>"}、67=>{{"hrs"=>"}、80=>{"hr"=>"(、120=>{"hrs"=>"}、60=>{,23=>{"hrs"=>"}、71=>{"hrs"=>"}、111=>{

update_hash密钥=[59,19,67,107,27,75,115,64,24,72,112,32,80,120,60,20,68,108,28,76,116,63,23,71,111,31,79,119,58,18,66,106,26,74,114,65,25,73,113,33,81,121]

update_hash values=[{"hrs"=>"5"},{"hr"=>"}、{"hours"=>""、{"hrs"=>""、}"hrrs"=>"}、}"hrrs"=>"6"},}"hr"=>""}、{"hrs"=>"}、{"hrs"=>""}、{"hrs"/>"}、{"hrrs"=>""}、{"hrrs"=>"}、{

我在这里完全不知所措。我知道我可以通过逐个迭代每个键/值对来实现它,但这似乎效率很低。如有任何帮助,我们将不胜感激。

上述问题的解决方案是在控制器中定义可接受的参数,如下所示:

  def schedule_params
    @update_hash.require(:employee_schedule).permit(:hrs)
  end

使用这种方法,上面的代码可以正常工作。

最新更新