布尔值不会更改回NULL

时间:2014-05-21 18:08:55

标签: ruby-on-rails

我在视图中设置了用户取消订阅通知的设置。他们可以成功取消订阅当前代码,但他们无法重新订阅。一旦更改为1,布尔值将不会重新回到NULL

<% if @user.no_email == true %>


<%= form_for(@user) do |f| %>
           <div class="forms">
                       <%= f.check_box :no_email, :value => nil %>
                       <%= f.submit 'Unsubscribe from all email notifications' %>
               </div>
       <% end %>
<% end %>

<% if @user.no_email.nil? %>
<%= form_for(@user) do |f| %>
           <div class="forms">
                       <%= f.check_box :no_email, :value => 1 %>
                       <%= f.submit 'Subscribe to email notifications' %>
               </div>
       <% end %>
<% end %>

2 个答案:

答案 0 :(得分:1)

简化事宜:

<%= form_for(@user) do |f| %>
<div class="forms">
<%= f.check_box :no_email, :value => @user.no_email %>
<%= f.submit @user.no_email ? 'Unsubscribe' : 'Subscribe' %>
</div>
<% end %>

这会将值从false更改为true。

答案 1 :(得分:0)

不要使用== true.nil?来测试布尔值。如果值为false,则.nil?检查将失败。做一些像:

if @user.no_email

if !@user.no_email