Условное утверждение в Rails - PullRequest
3 голосов
/ 04 марта 2011

Я пытаюсь получить некоторый код для отображения на основе условия.У меня есть логическое поле в таблице с именем "show_weekly".Я пытаюсь сделать следующее: если в столбце == 1 отображается первая строка, в противном случае отображается вторая строка кода.по какой-то причине он показывает только 2-ю строку.

<% if @listing.show_weekly == 1 %>

<%= number_to_currency(@listing.price/4, :unit => "&pound;") %> / week

<% else %>

<%= number_to_currency(@listing.price, :unit => "&pound;") %> / month
<% end %>

любая помощь очень ценится.спасибо

Ответы [ 5 ]

7 голосов
/ 04 марта 2011

Значение логического столбца будет либо false, либо true в рубине, но не 0 или 1. Так что вы должны сделать:

<% if @listing.show_weekly %>

вместо <% if @listing.show_weekly == 1 %>

3 голосов
/ 04 марта 2011

Я бы предложил добавить метод к вашей модели

def print_price

   @p =  this.show_weekly? ? this.price / 4 : this.price 
   number_to_currency (@p, :unit => "&pound;")

end
2 голосов
/ 04 марта 2011

Логическое значение сохраняется как 1 или 0, но оно всегда интерпретируется как true или false перед возвратом из модели.Это является источником путаницы.

Использование метода доступа show_weekly? может помочь, поскольку знак вопроса в имени метода обычно указывает, что он вернет логическое значение, или что-то, что можно оценить какboolean.

Будет намного удобочитаемее, если у вас есть:

<% if @listing.show_weekly? %>
   ...
<% else %>
   ...
<% endif %>

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

# Example: Comparison to nil
if (@something == nil)

# Should be: Checking if initialized
if (@something)

# Example: Comparison to true
if (@something == true)

# Should be: Testing directly
if (@something)

Поскольку есть только два значения, которые оценивают как false в Ruby, nil и false, как правило, все, что не соответствует действительности, равно нулю.Иногда у вас будут логические столбцы, которые могут быть true, false или nil, если они не определены, но это необычно и может сбить людей с толку.

2 голосов
/ 04 марта 2011

вам нужно проверить, равно ли оно true, а не 1

0 голосов
/ 04 марта 2011

Если @listing.show_weekly содержит логическое значение, просто проверьте значение true:

<% if @listing.show_weekly %>

.....

<% else %>

....

<% end %>

Обратите внимание, что вам даже не нужно "== true". Это связано с тем, что оператор IF только смотрит, есть ли значение true, возвращаемое из любого выражения, следующего за ним. Если @listing.show_weekly содержит значение true, это все, что видит оператор IF, если это все, что вы предоставляете.

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