我在视图中设置了用户取消订阅通知的设置。他们可以成功取消订阅当前代码,但他们无法重新订阅。一旦更改为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 %>
答案 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