2012-04-07 2 views
0

내가 전달 된 매개 변수입니다레일/루비 이상 타고 그리고 to_s 내 레일에서

mycontroller[users][]=79&mycontroller[users][]=80&commit=Apply 

를 제출

코드 형태에

<%= select_tag '[mycontroller][users]', @users, { :multiple => true, :size => 7} %> 
    <p><%= submit_tag l(:button_apply)%></p> 

과 같은 다중 선택 태그를 사용하고 형성 이제 내 뷰 파일에서 매개 변수를 검색 할 때 문자열이 으로 변환되므로 [79,80]이 "7980"으로 변환됩니다.

내가 생각

문제는 "#은 {}"문자열 배열을 변환하는 것입니다 : 편집

users = params[:mycontroller][:users] unless params[:mycontroller].nil? 

같은 사용자 PARAM을 얻기를위한

코드 보인다. 심지어 < % = %>는 (는) to_s를 호출합니다

어떻게 이것을 무시할 수 있습니까? 따라서 to_s는 "7980"대신 "79,80"을 반환합니다.

내가 무엇이 누락 되었습니까? 댓글을주세요.

Thnx.

+1

주의 사항 : 현명하게 사용하면'try'는 매우 유용합니다.'users = params [: mycontroller] .try (: [] ,: users)'. – apneadiving

+0

좋은 제안, @ 잠자리. Thnx. –

답변

3

to_s을 무시하면 매우 무거운 것처럼 보입니다.

당신은 각 요소에 대해 복잡한 무언가를 제시하는 경우 (일반적으로 더 읽을 개별적으로 각각의 요소를 표시하는 배열을 반복, 아니면 그냥 쉼표 배열 요소를 분리하려는 경우 my_array.join(',') 같은 것을 사용할 수 있습니다.

+0

thnx @ Frederick, 이것은 너무 간단했습니다. 자세한 설명은 thnx –

0

I의 힘이 Array.join 문자열을 반환 것을 알고 같은 문자열을이되어야 array.join 전화 ("")와 [79,80]의 배열 시도 나는 내 방식대로 해결하려고 노력했다. 이것은 effi 일 수 없다. cient/effective 그러나 그것의 해결 방법.

arr = [79,80] 
a =arr.inject(0){|op,i| op.to_s + i.to_s + ","}.to_s 
a[1,a.length-2] # "79,80" 
+0

이것은 루비 1.9에서 똑같은 동작을하지 않을 것입니다. to_s가 검사 할 앨리어스가있는 곳입니다 –

관련 문제