Rails 4 - 在每个语句中返回空值

Rails 4 - Returning empty value in each statement

在我的应用程序中,我在每个语句中呈现评论部分,但在其中得到了不寻常的响应。空评论总是在那里。我正在使用 Rails 4 和 materialize css。这就是它 looks 的样子。

这是我的代码

  <div class="s12 m7 l8 col">
    <ul class="collection with-header">

      <li class="collection-header">
        <h5>Comment's for you</h5>
      </li>

      <% @student.comments.each do |comment| %>
      <li class="collection-item">
        <!-- Content in single row -->
        <div>

          <%= comment.content %>

          <% if comment.user_id == current_user.id || current_user.try(:admin?) %>
          <%= link_to [comment.student, comment], method: :delete, data: {confirm: "Are you sure?"}, class: "secondary-content" do %>
          <i class="material-icons">delete</i>
          <% end %>
          <% end %>
        </div>
      </li>
      <% end %>
    </ul>
  </div>

可以通过条件,防止空评论

 if !comment.content.empty?
    comment.content
 end

希望对您有所帮助。

我猜你不想显示空评论?

将使用以下代码生成:

  <li class="collection-header">
    <h5>Comments for you</h5>
  </li>

  <% @student.comments.each do |comment| %>
    <% if comment.content.present? %>
      <li class="collection-item">
        <!-- Content in single row -->
        <div>

          <%= comment.content %>

          <% if comment.user_id == current_user.id || current_user.try(:admin?) %>
            <%= link_to [comment.student, comment], method: :delete, data: {confirm: "Are you sure?"}, class: "secondary-content" do %>
            <i class="material-icons">delete</i>
            <% end %>
          <% end %>
        </div>
      </li>
    <% end %>
  <% end %>
</ul>

我认为更好的方法是在保存之前验证评论。 (参见 http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_presence_of

作为,您的问题可能是缺乏验证。您(可能)在您的数据库中有一条内容为空的评论记录。

为了验证您的模型,请查阅文档,写得很好:http://guides.rubyonrails.org/active_record_validations.html

例如:

class Comment < ApplicationRecord
  validates :content, presence: true
end

您可能还想添加一些最小/最大文本长度,在这种情况下,您可以传递 length 哈希作为另一个验证:

class Comment < ApplicationRecord
  validates :content, presence: true, length: { minimum: 10, maximum: 140 }
end