2016-07-25 13 views
0

In meiner Anwendung Rendern Rendern Kommentarteil mit jeder Anweisung, aber eine ungewöhnliche Antwort darin erhalten. Ein leerer Kommentar ist immer da gewesen. Ich benutze Rails 4 mit materialise css. So sieht es aus wie looks.Rails 4 - Zurückgeben leerer Wert in jeder Anweisung

Hier ist mein Code

<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> 
+0

Ein leerer Kommentar ist immer da .. bedeutet, dass Sie leer Kommentare in v bekommen iew .. richtig .. ?? – Vishal

+0

Ja, es ist in Sicht (show.html.erb-Datei) –

Antwort

0

Ich nehme an, dass Sie keine leeren Kommentare anzeigen möchten?

, die mit diesem Code erzeugt werden würde:

<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> 

Ich denke, eine bessere Möglichkeit, die Kommentare sie vor dem Speichern zu überprüfen wäre. (siehe http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_presence_of)

+1

Und das ist fantastisch, funktioniert wie ein Charme. Danke für die Hilfe. –

0

Sie können den Zustand übergeben und verhindern, leere Kommentare

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

Hoffe, es wird Ihnen helfen.

+0

Das tut nichts. Dies wird nur den Kommentar Inhalt drucken, wenn es nicht leer ist, aber ich denke, was er will, dass die Zeile nicht da ist, wenn der Kommentar leer ist. – siegy22

+0

@RaVeN yeah .. ich verstehe .. aber ich denke auf andere Weise. – Vishal

+0

Was ist das "anders"? Ich sage nur, dass diese Lösung nichts ändert :) – siegy22

0

Wie RaVeN mentioned, ist Ihr Problem wahrscheinlich fehlende Validierung. Sie (wahrscheinlich) haben einen Kommentar-Datensatz mit leerem Inhalt in Ihrer Datenbank.

Um Ihr Modell zu validieren, finden Sie in der Dokumentation Look-up, es ist gut geschrieben: http://guides.rubyonrails.org/active_record_validations.html

Ein Beispiel wäre:

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

Sie auch einige Minimum/Maximum Text hinzufügen möchten Länge, in diesem Fall, dass Sie length Hash als eine weitere Validierung passieren kann:

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