2016-08-26 14 views
-2

コメントが公開されたとき、私は日付を表示しています:未定義のメソッド `strftimeの」:NilClass - コメント日

<%= comment.created_at.strftime("%d %b %Y") %> 

これは、コメントが正しく記入されていない、と提出された場合を除き、動作します。これが発生した場合、私はエラーが発生します:undefined method strftime 'for nil:NilClass`は私のコメントの検証ではなく。

これを修正するにはどうすればよいですか?私はあなたが適切にローカル変数コメントを埋めていないと思います

class CommentsController < ApplicationController 

def create 
    @post = Post.friendly.find(params[:post_id]) 
    @comment = @post.comments.create(params[:comment].permit(:name, `:email, :website, :body, :url))` 


    if @comment.errors.any? 
    render "posts/show" 
else 
    redirect_to post_path(@post) 
    end 
end 


def destroy 
    @post = Post.friendly.find(params[:post_id]) 
    @comment = @post.comments.find(params[:id]) 
    @comment.destroy 

    redirect_to post_path(@post) 

    end 


end 




class Comment < ActiveRecord::Base 


belongs_to :post 

validates_format_of :email, :with => /@/ 
validates :name, presence: true, length: { minimum: 5} 
validates :body, presence: true, length: { minimum: 5} 
validates :body, presence: true, length: { minimum: 5} 


def gravatar_url 
    stripped_email = email.strip 
    downcased_email = stripped_email.downcase 
    hash = Digest::MD5.hexdigest(downcased_email) 
    default_url = "https://s3-us-west-2.amazonaws.com/mirror-communications/assets/download.jpg" 

    "http://gravatar.com/avatar/#{hash}" 
end 


end 


<!-- Post Comments Partial --> 
<li>          
       <article class="comment">           
       <div class="user-avatar">            
       <%= image_tag comment.gravatar_url %>             
       </div> 
       <div class="comment-content"> 
       <h5 class="name"><%= comment.name %></h5> 
       <div class="comment-meta comment-reply"> 
       <span class="post-date"><%= comment.created_at.strftime("%d %b %Y") %></span>/<span class="comment-reply-link"><%= link_to comment.website.try(:remove, /.*\/\//), url_for(comment.website), target: '_blank', class: "comment-reply" %></span> 
       </div> 
       <p><%= comment.body %></p> 
       </div> 
       </article> 

<!-- Form Partial --> 
<%= form_for([@post, @post.comments.build]) do |f| %> 

<% if @comment && @comment.errors.any? %> 
    <div id="error_explanation" class="alert alert-danger alert-dismissable"> 
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> 
     <h2><%= pluralize(@comment.errors.count, "error") %> Your comment could not be submitted:</h2> 
    <ul> 
    <% @comment.errors.full_messages.each do |message| %> 
    <li><%= message %></li> 
    <% end %> 
    </ul> 
</div> 
<form class="comment-form"> 
<div class="row"> 
<div class="column width-4"> 
    <%= f.text_field :name, class: "form-name form-element", placeholder: "Name*", :tabindex => 1 %> 
</div> 

<div class="column width-4"> 
<%= f.email_field :email, class: "form-email form-element", placeholder: "Email* (not displayed)", :tabindex => 3 %> 
</div> 

<div class="column width-4"> 
    <%= f.url_field :website, class: "form-website form-element", placeholder: "Website", :tabindex => 4 %> 
</div> 
</div> 


    <div class="row"> 
    <div class="column width-12"> 
    <%= f.text_area :body, class: "form-message form-element", placeholder: "Message*", :tabindex => 5 %> 


    <%= f.submit class: "form-submit button medium bkg-black bkg-hover-turquoise color-white color-hover-white no-margin-bottom" %> 

</div> 
</div> 
</form> 
</div> 

<% end %> 

<!-- Posts Show -->` 

    <div class="post-comments"> 
    <h3 class="comments-title"> 
    <% if @post.comments.count < 2 %> 
    <%= @post.comments.count %> Comment</h3> 
    <% else %> 
    <%= @post.comments.count %> Comments</h3> 
    <% end %> 
    <div class="comments"> 
    <ul class="comment-list"> 

    <%= render @post.comments %> 
    </ul> 
    </div> 
    </div> 
+0

「コメントが正しく提出されずに提出されました」について詳しく説明できますか?これらのコメントはどのように作成されますか?彼らはあなたのデータベースにどのように残っていますか? – kiddorails

+0

comment.created_at.presentの場合は、comment.created_at.strftime( "%d%b%Y")を試してください。 – Navin

+0

@bgilbank、コメントが正しく作成されなかったときのコンテキストを説明できますか?コメントのバリデーションが合格すると、コメントレコードの 'created_at'と' updated_at'フィールドが自動的に読み込まれます。すなわち、コメントが存在する場合、 'created_at'フィールドを表示することができます。 'comment'は' nil'です。なぜその無しを見つけることを試みなさい。 –

答えて

0

は、ここに私のコードです。 これを試してみてください

comment.created_at.strftime("%d %b %Y") if comment and comment.created_at 
関連する問題