2012-04-07 3 views
0

In meinen Schienen bilden i sehen einen Mehr select-Tag bin mitRails/Ruby-Over Fahrt to_s für Array-Objekt

Code wie

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

Auf Formularparameter einreichen geben werden

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

Jetzt in meiner View-Datei, wenn ich Params sie in String konvertiert werden, so bekomme ich [79,80] wird umgewandelt in "7980"

Code sucht,

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

bearbeiten wie

Benutzer param bekommen:

Problem i annehmen, dass "# {}" Array String umwandelt. sogar <% =%> ruft to_s

Also, wie das zu überschreiben? So dass to_s "79,80" anstelle von "7980" zurückgibt

Was fehlt mir? Kommentare, bitte?

Thnx.

+1

hinweis: wenn sie weise verwendet wird, ist 'try' sehr praktisch:' users = params [: mycontroller] .try (: [],: users) '. – apneadiving

+0

netter Vorschlag, @apneadiving. Thnx. –

Antwort

1

versuchen Sie, rufen Array.join ("") und eine Reihe von [79,80] sollte eine Zeichenfolge werden wie "79,89"

Ruby Join Method

+1

Thnx @alex. Es war hilfreich –

3

Overriding to_s scheint sehr schwer durch.

können Sie entweder durchlaufen das Array einzeln jedes Element angezeigt wird (in der Regel besser lesbar, wenn Sie für jedes Element kompliziert etwas präsentieren sind, oder so etwas wie my_array.join(',') verwenden, wenn Sie nur durch Kommas wollen, um die Array-Elemente zu trennen.

+0

thnx @ Frederick, das war zu einfach. Thnx für detaillierte Erklärung –

0

ich vermöge wissen, dass Array.join String zurückgibt, so Ich habe versucht, es auf meine eigene Art zu lösen. Dies ist möglicherweise nicht effi cient/effektiv, aber es ist ein Workaround.

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

Dies wird sich nicht auf Ruby 1.9, wo To_s Alias ​​ist, um zu inspizieren –

Verwandte Themen