activerecord-2.3.14 разрывается с ruby ​​1.9.2 :: неопределенный метод `reject 'для" 4 ": String - PullRequest
2 голосов
/ 25 октября 2011
 undefined method `reject' for "4":String 

выбрасывается при попытке выполнить @ user.update_attributes (params).

Список параметров выглядит следующим образом

"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"},

Стек ошибок следующий

/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'

Я предполагаю, что это разрывы, так как String в ruby ​​1.9.2 не смешивается в Enumerable.Кто-нибудь может подтвердить, если это проблема, или я что-то упустил?

https://github.com/rails/rails/issues/3434

1 Ответ

6 голосов
/ 25 октября 2011

Вы предоставляете строку, где ActiveRecord ожидает массив. Вы можете переназначить параметр-нарушитель в контроллере, используя что-то вроде этого:

if (params[:user])
  params[:user][:role_ids] = [ params[:user][:role_ids] ]
end

Вы также можете настроить форму так, чтобы поле имело имя role_ids[] вместо просто role_ids, чтобы оно было представлено в виде массива.

...