Variable wird nicht an View übergeben

Hallo,
ich will von einem View Daten an einen anderen View übergeben:
<%= link_to ‘Frage für diese Umfrage hinzufügen’, :controller
=> ‘question’, :action => ‘newquestion’, :topicid => @topic.id %>

Also per einfachem Push, die Daten werden auch übertragen, aber im
anderen View mit dem Feld topicid, wo der Push eingetragen werden soll,
bleibt das Feld leer:
[view]
TopicID:
<%= text_field ‘question’, ‘topicid’ %>

Das Feld ist richtig betitelt, bleibt das Feld leer (topicid steht
allerdings in der URL :leichtconfused:).
Warum nimmt das System den übergebenen Parameter nicht an? Woran kann
das liegen?

Hallo Knut,

die zweite View kann von der Variable topic_id gar nichts wissen,
weil sie/der Wert nach Klick auf den Link erstmal nur in Form
von param[:topicid] an die Controller-Methode new_question der Klasse
question uebergeben wird. Du musst die dann, wenn du die in der
naechsten
View weiternutzen willst, wieder in eine Klassenvariable schreiben,
damit
die naechste View darauf zugreifen kann.

def newquestion
@topicid = params[:topicid]
end

Das mag sich vielleicht umstaendlich anhoeren ist aber gut so, denn
sonst haette man das register_globals-PHP-Problem

  • dass also durch den Request Variablenwerte ueberschrieben werden
    koennen.

Ausserdem hast du wohl einen Tippfehler in der 2. view:
‘topicid’ ist nur ein string, da muss in der Form wie du das machen
willst die Variable hin.
Die Railsmagie mit automatischem Werteintragen klappt da nicht.

text_field ‘question’, @topicid

Beste Gruesse,
Tom

On Feb 2, 2008, at 1:01 AM, Knut L. wrote:

[view]
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug


Thomas W.

Formrausch GmbH
Geschäftsfuehrer: Stefan Ternes, Thomas W.

Pfarrer-Kraus-Strasse 127e // 56077 Koblenz
Amtsgericht Koblenz HRB 20159

Buero Bonn // Muensterplatz 7 // 53111 Bonn
Buero Wiesbaden // Emanuel-Geibel-Str. 7 // 65185 Wiesbaden

phone: +49 261 914 699 20
fax: +49 261 914 699 21

[email protected]

Hallo Thomas,
danke für deine Hinweise, aber irgendwie mag Rails mich nicht. Ich habe
Thomas W. wrote:

def newquestion
@topicid = params[:topicid]
end

Ausprobiert, was die Übergebene Variable (newquestion?topicid=9)
auslesen sollte. Im View habe ich:
TopicID:
<%= text_field ‘question’, :topicid %>
eingeben (topicid ist das Feld, question die Tabelle und :topicid die
Variable die genutzt werden soll).
Leider wird die Variable nicht angezeigt (und auch nicht gespeichert).
Ich habe jetzt probiert die vielleicht wären des Pushs (speichern)
auszulesen (also noch nicht einmal im View, da ich sie nur speichern
will) und zu speichern:

if request.post?
@question = Question.new(params[‘question’])
@question.topicid = params[:topicid]
if @question.save!
flash[:notice]=‘Neue Frage erfolgreich angelegt’
@questions = Question.find(:all, :order =>“id”)
render :action => ‘list’
else
render :action => ‘newquestion’
end
end

aber noch nicht einmal das klappt (wobei ich mir vorstellen kann, dass
er die Daten auch nicht zuordnen kann). Ich bekomme nur eine
Erfolgsmeldung (keinen Fehler, dass topicid nicht gefunden wurde), in
der Datenbank steht aber nur die eingegeben Frage.

Woran kann das noch liegen? Von der Idee her sollte es doch
funktionieren, ich übergebe den Wert an das neue View, lese diesen im
Controller aus und hinterlege diesen in einer Instanzvariable, die ich
dann im View wieder weiterverarbeite…

Hast du noch eine Idee oder einen Hinweis?


Thomas W.

Formrausch GmbH
Gesch䦴sfuehrer: Stefan Ternes, Thomas W.

Pfarrer-Kraus-Strasse 127e // 56077 Koblenz
Amtsgericht Koblenz HRB 20159

Buero Bonn // Muensterplatz 7 // 53111 Bonn
Buero Wiesbaden // Emanuel-Geibel-Str. 7 // 65185 Wiesbaden

phone: +49 261 914 699 20
fax: +49 261 914 699 21

[email protected]
www.formrausch.com

On Sat, Feb 02, 2008 at 04:12:20PM +0100, Knut L. wrote:

<label for="topicid">TopicID:</label>
<%= text_field 'question', :topicid  %>

eingeben (topicid ist das Feld, question die Tabelle und :topicid die
Variable die genutzt werden soll).

wenn du die topicid in einem Formular für ‘Question’ verwenden willst,
solltest du das eher so machen:

def newquestion
@question = Question.new :topicid => params[:topicid]
end

text_field bezieht sich immer auf ein Feld (:topicid) eines Objekts
(question).

Jens


Jens Krämer
http://www.jkraemer.net/ - Blog
http://www.omdb.org/ - The new free film database

N’Abend,

Noch etwas allgemeines:
Dir wird (hoffentlich bald) auffallen dass es in Rails ein ganz
typisches Muster
bei der Benennung von Variablen oder Methoden gibt. Das ist ein
Grundpfeiler der
“convention over configuration” Philosophie und erleichtert dem
nächsten der
den Code bearbeitet die Einarbeitung.
Also, sowas wie newquestion sollte new heißen und im
QuestionController stehen.
Wenn du da also sowas wie ein Q&A Forum aufbaust dann wirst du
mindestens
die Controller Section/Forum, Topic, Question und Answer haben.
Zweitens ist die id eines objects ist immer ala topic_id und nicht
topicid.

Rails verlässt sich teilweise auf diese Konventionen was dir früher
oder später
Kopfzerbrechen verschaffen wird.

Lesetipps, leider nix für Controller, da hilft nur Open Source
Software lesen:

ciao, tom


Thomas R. “TomK32” Koll || http://tomk32.de || http://ananasblau.com
(NEW)
just a geek trying to change the world
Skype: TomK32 || Mail: [email protected]

Hallo Jens,
hat geklappt wie von dir gesagt. Wunderbar (also muss ich den Datensatz
schon beim Aufruf anlegen, wenn ich das richtig verstanden habe).
Danke!

Jens Krämer wrote:

On Sat, Feb 02, 2008 at 04:12:20PM +0100, Knut L. wrote:

<label for="topicid">TopicID:</label>
<%= text_field 'question', :topicid  %>

eingeben (topicid ist das Feld, question die Tabelle und :topicid die
Variable die genutzt werden soll).

wenn du die topicid in einem Formular f�r ‘Question’ verwenden willst,
solltest du das eher so machen:

def newquestion
@question = Question.new :topicid => params[:topicid]
end

text_field bezieht sich immer auf ein Feld (:topicid) eines Objekts
(question).

Jens


Jens Kr�mer
http://www.jkraemer.net/ - Blog
http://www.omdb.org/ - The new free film database

Hi,

Aber dazu eine Frage, wenn ich nun Daten aus zwei Tabellen verarbeiten
will (1:N) wie sieht das die CoC aus? Kann ich dafür einen extra
Controller eröffnen oder muss ich das in einem anderen Controller
joinen?

Vergiss mal das mit den Tabellen, reden wir lieber nur von models.

Meistens hast du für jedes Model einen controller der idealerweise nur
die golden seven actions:
http://www.softiesonrails.com/2007/12/14/textmate-snippet-for-restful-
controller

Für associations zwischen zwei models hast du dann aber keinen neuen
Controller sondern
gibt’s einfach noch die topic_id oder sowas mit und arbeitest mit der im
QuestionController.

ciao, tom


Thomas R. “TomK32” Koll || http://tomk32.de || http://ananasblau.com
(NEW)
just a geek trying to change the world
Skype: TomK32 || Mail: [email protected]

Thomas R. Koll wrote:

N’Abend,


Lesetipps, leider nix f?troller, da hilft nur Open Source
Software lesen:

ciao, tom


Thomas R. “TomK32” Koll || http://tomk32.de || http://ananasblau.com
(NEW)
just a geek trying to change the world
Skype: TomK32 || Mail: [email protected]

Hi Thomas,
danke für die Links! So etwas habe ich gesucht (also die genauen Angaben
was hinter diesem CoC gehört. Ich habe dieses Beispiel (Vote: Man kann
eine Überschrift anlegen und Frage dazu hinzufügen) wg. meine Uni
gewählt und zum testen programmiert (daher noch die komischen Titel).
Die habe ich nun aber angepaßt (merke schon, dass es ansonsten schwierig
wird).

Aber dazu eine Frage, wenn ich nun Daten aus zwei Tabellen verarbeiten
will (1:N) wie sieht das die CoC aus? Kann ich dafür einen extra
Controller eröffnen oder muss ich das in einem anderen Controller
joinen?

Lieben Gruß,
Knut