Block in select

Hallo Gruppe,

ich muss ohne die Hilfe von date_select sowas hier machen:

<% if not session[:duffy] == “duck” %>
<%= select :start_time, :start_minute, [[“00”,“00”], [“15”,“15”],
[“30”,“30”], [“45”,“45”]] %>
<% else %>
<%= select :start_time, :_start_minute, 0.upto(59) {|p| [[p,p]]} %>
<% end %>

… was als derart naiver Ansatz natürlich fehlschlägt. Aber weder
auf dem ruby doc, noch der Rails API werde ich momentan schlau. Mal
abgesehen davon, dass man den Inhalt der choice im Model setzen und
nicht in der View auswerten sollte … aber ich finde keinen
schreibfaulen Weg, mein Array[][] in die choice zu bekommen. Kann
mich jemand in die richtige Richtung schubsen?

Danke.
Beste Grüsse

Jan R.
[email protected]

Array.new(60) {|p| [p, p]}

Besten Gruß
Jan

Am 17.10.07 schrieb Jan R. [email protected]:

Jan R.


Jan P.
Rechtsanwalt

Grünebergstraße 38
22763 Hamburg
Tel +49 (0)40 41265809 Fax +49 (0)40 380178-73022
Mobil +49 (0)171 3516667
http://www.inviado.de

Hallo Jan,

dein Block liefert kein Array zurück. Im günstigsten Fall ein 0 dass
Ruby deinen Block korrekt abgearbeitet hat.
Was aber 3 Zeilen braucht um das zu machen wäre
<% a = [] %>
<% 0.upto(59) {|p| a << p } %>
<%= select :test, :tmp, a %>

Und noch etwas. Wenn du im Select den Ausgewählten Wert auch so in
die Datenbank speicherst brauchst du kein Array-Array einzugeben.

Beispiel
<%= select :start_time, :start_minute, [“00”,“15”,“30”,“45”] %>

reicht völlig aus.

Gruß
Önder

Am 17.10.2007 um 17:33 schrieb Jan R.:

Hallo Önder,

<% a = [] %>
<% 0.upto(59) {|p| a << p } %>
<%= select :test, :tmp, a %>

Das war mein zweiter Ansatz, gibt aber einen: undefined method
`inject’ for 1:Fixnum, ich hatte es allerdings mit 0.upto(59){|p| a
<< [p,p]} versucht, fahren aber beide gegen die Wand, was ich i.A.
noch nicht verstehe.

Und noch etwas. Wenn du im Select den Ausgewählten Wert auch so in
die Datenbank speicherst brauchst du kein Array-Array einzugeben.

Danke für den Tip, ist natürlich richtig.

Beste Grüsse

Jan R.
[email protected]

Alternativ könnte ich auch anbieten:

(0…59).collect {|i| [i]}

In deinem speziellen Fall muss man auch nicht Wert und Bezeichnung
jeder Option angeben, da diese identisch sind. Aber ich vermute mal,
dass es fast noch schöner wäre das ganze im Controller ablaufen zu
lassen und ein Konstrukt mit Integer.step zu nutzen. So könnte man
vielleicht die If-Weiche einsparen. Nur so ne Idee.

Hi Jan,

Array.new(60) {|p| [p, p]}

funktioniert dann auch mit Array.new(60) {|p| p}, frage mich nur,
warum Önders und mein Ansatz schief geht?

Gruss und Dank.

Jan R.
[email protected]

N’abend allerseits,

(0…59).collect {|i| [i]}

oder: (0…59).to_a

Beste
GrüßeMoritz

Hallo Jan,

das ist komisch. Ich hab das genau so gerade im view getestet und das
funktioniert einwandfrei.

Gruß
sichwundernder Önder

Am 17.10.2007 um 18:20 schrieb Jan R.: