2011-10-25 2 views
2
undefined method `reject' for "4":String 

이 발생합니다. 오류 스택 나는 이것이 'Enumerable에서'믹스 인하지 않습니다 루비 1.9.2에 문자열로 나누기 가정activerecord-2.3.14가 ruby로 1.9.2에서 깨졌습니다. "reject"가 "4"인 경우 : @ user.update_attributes (params)를 수행하려고하면 문자열

/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14 /lib/active_record/associations.rb:1336:in block in collection_accessor_methods' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2918:inblock in assign_attributes' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2914:in each' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2914:inassign_attributes' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/li b/active_record/base.rb:2787:in attributes=' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/lib/active_record/base.rb:2671:inupdate_attributes_inside_transaction' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/lib/active_record/transactions.rb:229:in block in with_transaction_returning_status' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/lib/active_record/connection_adapters/abstract/database_statements.rb:136:intransaction' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/lib/active_record/transactions.rb:182:in transaction' 
/home/narendra/.rvm/gems/[email protected]_schedule/gems/activerecord-2.3.14/lib/active_record/transactions.rb:228:inwith_transaction_returning_status' 
/home/narendra/.rvm/gems/[email protected]_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' 

다음과 같다

"user"=>{"login"=>"admin", "first_name"=>"Admin", "last_name"=>"Admin", "email"=>"[email protected]", "location_id"=>"1", "last_login_at_text"=>"Never logged in", "password"=>"", "password_confirmation"=>"", "role_ids"=>"4", "active"=>"true", "is_staff"=>"true"}, 

을 다음과 같이

엔 params 목록입니다. 이이 문제가 아니면 내가 뭔가를 놓친 경우 는 사람이 확인할 수 있습니까? 액티브가 배열 기대된다

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

답변

6

당신은 문자열을 공급하고 있습니다. 이 같은 것을 사용하여 컨트롤러에 잘못된 매개 변수를 매핑 할 수 있습니다 :

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

당신은 또한 당신의 양식을 조정할 수있는 필드가 배열로 제출됩니다 그래서 대신 role_idsrole_ids[]라는 있도록. 형태에 의해 생성되는

+0

params 객체를 파라미터로 제출. 내가 원하는 건 액티브 레코드가 이걸 우아하게 처리해야한다는거야. 코드 내의 모든 곳에서 이와 같이 코드를 패치하는 것은 좋지 않을 것입니다. – naren

+0

잘못된 폼 제출을 처리하기 위해 ActiveRecord를 패치하면 안됩니다. 그런 방식으로 데이터를 보내지 않아야하기 때문에 처음에는 전혀 효과가 없었습니다. – tadman

+0

이것은 루비 1.8.7과 레일 2.3.14에서 완벽하게 작동했습니다. 루비 1.9.2로 마이그레이션 할 때 문제가 발생했습니다. 내가 사용하고있는 라디오 버튼에 대해서는 레일을 처리하는 방법 (선택한 옵션이 String으로 전송 됨)이라고 생각합니다. 라디오 버튼 입력을 문자열 대신 배열 요소 (예 : role_ids "="[4 "] 대신 role_ids"= ""4 ") 대신 형식으로 지정하는 레일 도우미가 있는지 확실하지 않습니다. 그럼 여전히 나쁜 양식 제출 또는 라디오 버튼 도우미가 해결되어야한다고 생각합니까? Enumerable에서이 문자열의 믹스 인이기 때문에 – naren