Ruby on rails activerecord-2.3.14使用ruby 1.9.2中断:未定义的方法'reject';至于;“4”字:一串

Ruby on rails activerecord-2.3.14使用ruby 1.9.2中断:未定义的方法'reject';至于;“4”字:一串,ruby-on-rails,activerecord,ruby-1.9.2,Ruby On Rails,Activerecord,Ruby 1.9.2,在我尝试执行@user.update_属性(参数)时引发 参数列表如下所示 undefined method `reject' for "4":String 错误堆栈如下所示 "user"=>{"login"=>"admin", "first_name"=>"Admin", "last_name"=>"Admin", "email"=>"nfsurveytest+admin@neurofocus.com", "location_id"=>"1", "la

在我尝试执行@user.update_属性(参数)时引发

参数列表如下所示

 undefined method `reject' for "4":String 
错误堆栈如下所示

"user"=>{"login"=>"admin", "first_name"=>"Admin", "last_name"=>"Admin", "email"=>"nfsurveytest+admin@neurofocus.com", "location_id"=>"1", "last_login_at_text"=>"Never logged in", "password"=>"", "password_confirmation"=>"", "role_ids"=>"4", "active"=>"true", "is_staff"=>"true"},
我假设这会中断,因为ruby 1.9.2中的字符串没有混合“Enumerable”。 有人能确认这是一个问题还是我遗漏了什么吗


您提供了一个字符串,其中ActiveRecord需要一个数组。您可以使用以下方法在控制器中重新映射有问题的参数:

/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14   /lib/active_record/associations.rb:1336:in block in collection_accessor_methods'
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2918:inblock in assign_attributes'
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2914:in each'
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2914:inassign_attributes'
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/li b/active_record/base.rb:2787:in attributes='
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2671:inupdate_attributes_inside_transaction'
 /home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/transactions.rb:229:in block in with_transaction_returning_status'
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/connection_adapters/abstract/database_statements.rb:136:intransaction'
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/transactions.rb:182:in transaction'
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/transactions.rb:228:inwith_transaction_returning_status'
/home/narendra/.rvm/gems/ruby-1.9.2-p290@nf_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2667:in update_attributes'
/home/narendra/workspace/nf_schedule/app/controllers/users_controller.rb:100:inupdate'

您还可以调整表单,使字段名为
role\u id[]
而不是
role\u id
,以便将其作为数组提交。

参数由表单提交生成。我希望activerecord能够优雅地处理这个问题。在代码中的任何地方都像这样修补代码是不好的。你不应该修补ActiveRecord来处理糟糕的表单提交。您不应该以这种方式发送结构化数据,因此令人惊讶的是,它一开始就可以工作。这在ruby 1.8.7和rails 2.3.14中运行得非常好。当我迁移到ruby 1.9.2时,我面临着这个问题。我相信对于我正在使用的单选按钮,rails就是这样处理的(所选选项作为字符串发送)。我不确定是否有rails助手将单选按钮输入格式化为数组元素而不是字符串(例如:role\u id“=>[“4”]而不是role\u id“=>“4”)。所以你认为它仍然是一个坏的表单提交或单选按钮助手应该被修复?
if (params[:user])
  params[:user][:role_ids] = [ params[:user][:role_ids] ]
end