У меня много проблем с получением правильного значения true / false для правильной оценки в Rails.У меня есть это в помощнике:
def should_we_ask_to_subscribe?
if @user.email.blank?
true
elsif @user.subscriber == false
true
else
false
end
end
Я проверяю на пустое, потому что пользовательский объект создается omniauth, а иногда, как и в Twitter, я не получаю письмо.После создания авторизации пользователь получает указание обновить свой профиль и добавить электронное письмо.Если нет электронной почты, я обязательно предоставлю возможность подписаться, потому что они не могут быть подписаны.Это представление:
<% if should_we_ask_to_subscribe? %>
<div class="field">
<%= f.check_box :subscriber %>
<%= f.label :subscriber, "It's okay to send me the occassional email. I know I can unsubscribe at any time." %>
</div>
<% else %>
<div class="field">
You're subscribed to our email list.<br />
<%= f.check_box :unsubscribe %>
<%= f.label :unsubscribe, "Please unsubscribe me." %>
</div>
<% end %>
Однако, даже когда логическое значение подписки установлено на f
- скажем, пользователь ввел электронное письмо, но не подписан (или не подписан, что является единственным способом, которымлогическое значение будет f
) should_we_ask_to_subscribe?
по-прежнему оценивается как ложное.Я пробовал разные варианты, но просто не получаю.
Обновление
Хорошо, ясно, что база данных хранит логическое значение как false, но rails интерпретирует его как true иЯ не могу понять почему.Следуя приведенным ниже советам с проверкой, журнал показывает @ user.subscriber = true, хотя в консоли и в базе данных я получаю подписчика: false для этого конкретного пользователя.
Второе обновление
Итак, янаписали несколько юнит-тестов и все они проходятВ моих журналах я замечаю, что код выполняет следующее:
(0.4ms) UPDATE "users" SET "subscriber" = 'f', "updated_at" = '2011-07-05 13:40:58.178186' WHERE "users"."id" = 47
, и это код в методе моей модели, который делает это:
self.update_attribute(:subscriber, false)
Когда яПосмотрите на базу данных через SQLite и консоль, я вижу f
и u.subscriber => false
соответственно.Но когда я использую logger.info "@user.subscriber = #{@user.subscriber.inspect}"
, чтобы увидеть, как помощник вида интерпретирует его, я получаю: @user.subscriber = true
в журнале.Итак, я предполагаю, что проблема в том, как я установил false
, так как кажется, что rails интерпретирует любое значение в столбце подписчика как истинное (кроме консоли, где, как кажется, говорится, что оно ложно?).