используя ноль или [] на рельсах 2.3.8 - PullRequest
1 голос
/ 15 ноября 2010

У меня странная ситуация с моим приложением rails (2.3.8)

Я хочу присвоить значение no nil некоторой переменной в моем контроллере, поэтому я написал этот код:

@myValue = session[:value] or []

На мой взгляд, я написал:

<%= @myvalue.size %>

Когда я отображаю свою страницу, у меня появляется ошибка nil.

Я пробовал ноль или[] в IRB, и я получаю [].Итак, мой вопрос: если кто-нибудь знает, почему в рельсах работает по-другому?

PS: Единственный камень, который я использую, это версия ячейки 3.3.3.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 15 ноября 2010

Ключевое слово 'or' имеет слишком низкий приоритет для работы этого кода.Используйте '||'вместо.Чтобы продемонстрировать точку:

ruby-1.9.2-p0 > a = nil or true; a
 => nil 
ruby-1.9.2-p0 > a = nil || true; a
 => true 
3 голосов
/ 15 ноября 2010

Это порядок операций.

@myValue = (session[:value] or []) будет работать.Я считаю, что @myValue = session[:value] or [] интерпретируется как (@myValue = session[:value]) or [].Но @myValue = сессия [: значение] ||[] тоже работал без паренов.|| имеет более высокий приоритет, чем or.

2 голосов
/ 15 ноября 2010

Идиома должна сделать session[:value] || [], используя ||, а не or.Вы также можете попробовать session[:value].to_a.Это работает, потому что nil.to_a становится [].

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