2009-05-30 2 views
4

Die Rails-Konsole scheint mehrere Ruby-Anweisungen in derselben Zeile nicht zu mögen, die durch ein Semikolon getrennt sind. Immer wenn ich das mache, beginnt die nächste Zeile mit ?> und ich finde, dass nur die erste Anweisung ausgeführt wurde. Müssen Sie jede Aussage in eine separate Zeile setzen?Semikolon als Anweisungseparator in der Rails-Konsole

>> user = User.new 
user = User.new 

=> #<User id: nil, username: "", hashed_password: "", first_name: "", last_name: "", email: "", display_name: "", user_level: 0, created_at: nil, updated_at: nil, posts_count: 0> 

>> user.username = "John"; hashed_password = "John"; first_name = "John"; last_name = "coltrane"; email = "[email protected]"; display_name = "Johndispay"; user_level = 9; 
user.username = "John"; hashed_password = "John"; first_name = "John"; last_name = "coltrane"; email = "[email protected]"; display_name = "Johndispay"; user_level = 9; 

?> user.save 
user.save 

=> true 

Alles außer user.username = "John"; wurde

+0

beachten Sie auch, dass der Code tatsächlich alle ausgeführt wurde: Sie erstellt und setzen lokale Variablen namens hashed_password, first_name, etc. Fast jedes Mal, wenn Sie denken, die Software, die Sie verwenden, ist fehlerhaft, es ist Sie, die etwas falsch macht! (Fast - manchmal gibt es wirklich einen Fehler, aber es wäre nicht das erste, wonach ich suchte) ;-) –

Antwort

5

Sie müssen sagen, ignoriert "user". Ruby weiß also, dass Sie die Attributzuweisungsmethoden der Instanz des Benutzers aufrufen wollen. Andernfalls setzen Sie nur lokale Variablen namens „hashed_password“ usw.

>> user.username = "John"; user.hashed_password = "John"; user.first_name = "John"; user.last_name = "coltrane"; user.email = "[email protected]"; user.display_name = "Johndispay"; user.user_level = 9; 

Obwohl Sie nur einen Hash der Attribute passieren könnte man auf die neue Instanz festlegen möchten, wie so

>> user = User.new(:username => "John", :hashed_password => "John", ... 
+0

Danke für den Hash-Tipp! – eggdrop

1

sind Sie sicher, dass Sie nicht

user.username = "John"; user.hashed_password = "John"; 

bedeuten habe ich versucht

>> a = 1; b= 2 
=> 2 

>> a 
=> 1 

>> b 
=> 2 

Wenn etwas nicht funktioniert, können Sie eine Regel verwenden: Reduzieren Sie sie immer auf den einfachsten Fall.

4

Es ist das Nachlaufende; auf deine Eingabe. Wenn du ein ';' Am Ende wird IRB annehmen, dass Sie eine weitere Anweisung hinzufügen möchten. Wenn Sie es auslassen, wird es alle Anweisungen auswerten und den Rückgabewert des letzten zurückgeben.

Manchmal, wenn die Methode Ich rufe wird eine große Auswahl an kehre ich so etwas tun wird ...

a = Account.entries; a.size 

Diese Werte speichern muss ich dann und nur geben die Größe des Arrays anstatt zu versuchen, es auf die Konsole zu übertragen, was bei großem Umfang sehr lange dauern kann.

+0

Spot auf, danke. –

Verwandte Themen