布尔值的Rails输出不正确

时间:2016-07-25 04:26:16

标签: ruby-on-rails ruby database sqlite boolean

背景

我在rails应用程序中有一个故事模型。该模型的一个部分是"发布"的布尔值。

在创建和编辑表单上,我有一个切换按钮,显示" On"如果故事发表并且"关闭"如果没有发表。此切换目前正常工作,我可以切换发布或未发布的故事;并且此切换相应地更新数据库。

问题

在显示页面上,我试图做一个if语句,但它没有正确解析,所以我只是打印出已发布的变量,它总是打印出来" false"即使在检查数据库时,它也被设置为" true"。

守则

<% @title="Stories" %>

<p><strong><%= @story.heading %></strong></p>

<p><%= @story.body %></p>

<p>
  <%= #!!!!!!!!!!!!!!!!Not working currently!!!!!!!!!!!!!
      # if @story.published 
      #   @publish_Notice = "This story has been made public."  
      # else
      #   @publish_Notice = "This story is private."  
      # end
      # @publish_Notice 

      @story.published   # Always prints out 'false' even when database shows 'true'
  %>
</p>

<p>~ <%= @story.authorName %></p>

<p>Submitted: <%= @story.created_at.strftime("%B, %d %Y") %><br/>

<%=
  @location = " "

  if @story.locationCity == "" || @story.locationCity == " " || @story.locationCity.nil?
    @location = " "
  else
    @location = "Near: " @story.locationCity + ", " + @story.locationState 
  end
%>
<%= @location %></p>

<% if (user_signed_in?) && (current_user == @story.user) %>
  <%= link_to 'Edit', edit_story_path(@story) %> |
  <%= link_to 'Delete', @story, method: :delete, data: { confirm: 'Are you sure?' } %> | 
<% end %>
<%= link_to 'Back', stories_path %>

1 个答案:

答案 0 :(得分:1)

答案 经过2天试图弄清楚并解决这个问题,并且没有提出任何问题并最终在这里发布问题,我几分钟后在我的故事控制器中的代码片段中发现了问题。看看您是否可以在下面的代码中找到问题。

旧代码

def show
  if @story.published = false && @story.user != current_user
    redirect_to stories_url, notice: 'That action is not permitted.'
  end
end

<强>解释

我设置了此代码段,以阻止人们在浏览器中输入故事编号并查看它,即使它尚未发布。问题代码在第二行,我检查故事是否已发布。我只放了一个等号,因此每次出现一个故事时,它都会将公布的变量改为“假”。无需更改数据库。我添加了额外的等号,现在一切正常。这是新代码。

新代码

def show
  if @story.published == false && @story.user != current_user
    redirect_to stories_url, notice: 'That action is not permitted.'
  end
end

感谢那些如此迅速地请求跟进信息以帮助解决我的问题的人们。感谢您的帮助。