Select dropdown bestehend links


#1

Hallo,
versuche mich gerade in RoR einzuarbeiten.
Habe lange online gesucht, aber leider keine Lösung zu meinem Problem
gefnuden, was ich eigentlich nicht ganz glauben kann.

Ich hätte gern ein “Select” bei dem ich durch Auwahl direkt, ohne einen
“Submit Button” auf eine andere Seite gelinkt werde.
Im Moment rufe ich mir im Select auf onchange einen Helper auf der mit
redirect_to zur entsprechenden Seite verlinkt. Nur das im
application_helper “redirect_to” eine “undefined method” ist.

Wahrscheinlich bin ich sogar komplett auf dem Holzweg. Es muss doch eine
elegantere Lösung geben. Mit JavaScript wäre das ganze kein großes
Problem. Würd’s aber gerne ohne lösen.

Vielen Dank für eure Hilfe im Voraus.


#2

Hallo Marcus,

Ich hätte gern ein “Select” bei dem ich durch Auwahl direkt, ohne einen
“Submit Button” auf eine andere Seite gelinkt werde.

Möchtest Du die komplette Seite neu laden, oder nur einen Teil
ändern? Der Bereich mit der Select-Box selber soll doch vermutlich
bleiben, oder?

In diesem Fall wären Partials Dein Freund.

Im View sieht es ungefähr so aus:
(…)

<%= select_tag %>

<%= observe_field(:,:frequency => 0.2,:update =>
“Layer1”,
:url => {:action => :DOSOMETHING}) %>

          <div id="Layer1"> <%= render :partial =>'FOOBARl' %>

Der Controller:

def DOSOMETHING
name = request.raw_post # das ist das Ergebnis der Auswahl

Jetzt passiert was tolles

render :partial => ‘FOOBAR’
end

Hope It Helps

Sven


#3

Hallo Marcus,

hier gibt’s eine langwierige Auseinandersetzung mit dem Thema (auch
wenn’s dabei darum geht, das eine DropDown in Abhängigkeit von einem
anderen zu ändern):
http://www.roryhansen.ca/2005/06/21/related-drop-down-lists-with-ruby-and-ajax/

Die :frequency sollte in dem Beispiel allerdings überflüssig sein,
dass observe_field reagiert für select-boxen auf onchange, ansonsten
geht das ganze time-based, muss ja nicht sein für selects…

Wenn es ein roundtrip zum Server werden soll, dann kriegt man den
ausgewählten Wert als Parameter mit und kann dann als Antwort zum
Beispiel ein rjs-redirect schicken ( render :update { |page|
page.redirect_to '} -
mehr dazu unter:
http://www.caboo.se/articles/2006/2/20/assert-yourself-man-redirecting-with-rjs)

Einfacher geht’s vermutlich, wenn man die urls gleich in das select
reinschreibt und dann per window.location.href=… aufruft: Meines
Wissens fehlt dem observe_field allerdings eine Methode, um javascript
direkt aufzurufen(oder bin ich da nur hinterher mit den Versionen?!) -
daher wird es zum Beispiel hier auch aufgehackt:

http://joshhuckabee.com/rails-observe-field-function-and

Na, elegant ist das wohl nicht, aber das spart einem dann den remote-
aufruf.

Grüßestefan

PS: Geht das eigentlich nur mir so, oder sind diese rjs-geschichten am
Ende dann doch immer komplizierter&schlechter zu warten, als die
beiden Layer fein säuberlich auseinanderzuhalten und das javascript
direkt zu schreiben? Was ist nur so schlimm an JavaScript, dass man da
noch nicht mal eine Zeile schreiben darf, selbst wenn es einen halben
Tag Arbeit spart?! Und sauberer wird der Code dadurch auch nicht
wirklich, wenn man dann früher oder später doch noch “zu Fuß” an das
javascript ran muss…

PPS: Für eine reine rjs-freie Lösung bietet sich JS-Named-Routes
an(http://github.com/jsierles/js_named_routes/tree/master
) an - damit lassen sich auch im Client die Routes zusammen bauen, die
man auf dem Server in seiner Map hat…

Am 27.11.2008 um 14:51 schrieb Sven Rimbach:

In diesem Fall wären Partials Dein Freund.

Hope It Helps

Sven


rubyonrails-ug mailing list
removed_email_address@domain.invalid
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug


stefan frank
vierundsechzig.de
software&service
weberstr. 10
69120 heidelberg
tel. +49 (0) 6221 7277049
mobil +40 (0) 173 2383390
mail removed_email_address@domain.invalid
www.vierundsechzig.de