точка с запятой как разделитель операторов в Rails Console - PullRequest
6 голосов
/ 30 мая 2009

Консоль Rails, похоже, не похожа на несколько операторов ruby ​​в одной строке, разделенных точкой с запятой. Всякий раз, когда я делаю это, следующая строка начинается с ?>, и я обнаружил, что был выполнен только первый оператор. Вы должны поместить каждое утверждение в отдельной строке?

>> 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 = "John@coltrane.com"; display_name = "Johndispay"; user_level = 9; 
user.username = "John"; hashed_password = "John"; first_name = "John"; last_name = "coltrane"; email = "John@coltrane.com"; display_name = "Johndispay"; user_level = 9; 

?> user.save
user.save

=> true

Все, кроме user.username = "John"; было проигнорировано

Ответы [ 3 ]

8 голосов
/ 30 мая 2009

Вы должны сказать «пользователь». поэтому Ruby знает, что вы хотите вызвать методы присвоения атрибута экземпляра пользователя. В противном случае вы просто устанавливаете локальные переменные, называемые hashed_password и т. Д.

>> user.username = "John"; user.hashed_password = "John"; user.first_name = "John"; user.last_name = "coltrane"; user.email = "John@coltrane.com"; user.display_name = "Johndispay"; user.user_level = 9; 

Хотя вы можете просто передать хэш атрибутов, которые вы хотите установить в новом экземпляре, например,

>> user = User.new(:username => "John", :hashed_password => "John", ...
4 голосов
/ 31 мая 2009

Это трейлинг; на ваш вклад. Когда вы ставите ';' в конце IRB будет предполагать, что вы хотите добавить еще одно утверждение. Если вы не включите его, он оценит все операторы и вернет возвращаемое значение последнего.

Иногда, если метод, который я вызываю, возвращает большой массив, я делаю что-то вроде этого ...

a = Account.entries; a.size

Это сохранит нужные мне значения и просто выведет размер массива вместо того, чтобы пытаться вывести его на консоль, что может занять много времени, если оно большое.

1 голос
/ 30 мая 2009

Вы уверены, что не имели в виду

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

я пытался

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

>> a
=> 1

>> b
=> 2

когда что-то не работает, вы можете использовать одно правило: всегда сокращайте его до самого простого случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...