Rails beginner — ошибка сравнения времени с нулевым значением

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я работаю над этим уроком Blogger http://tutorials.jumpstartlab.com/projects/blogger.html#i3:-tagging

и я продолжаю получать ошибку «сравнение времени с нулевым результатом», когда я добавляю

 <p>Posted <%=distance_of_time_in_words(comment.article.created_at, comment.created_at) %> later<p>
  

к частичному моему комментарию (_comments.html.erb)

Вот моя схема

 ActiveRecord::Schema.define(version: 20140618233420) do

  create_table "articles", force: true do |t|
    t.string   "title"
    t.string   "body"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "comments", force: true do |t|
    t.string   "author_name"
    t.text     "body"
    t.integer  "article_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "comments", ["article_id"], name: "index_comments_on_article_id"

 end
  

Может кто-нибудь объяснить? Мой сервер rails указывает, что и комментарии, и статьи имеют временные метки, так как же они отображаются как nil?

Вот полный код в моем файле _comment.html.erb

 <div>
    <h4>Comment by <%= comment.author_name %></h4>
    <p class="comment"><%= comment.body %></p>
    <p>Posted <%=distance_of_time_in_words(comment.article.created_at, comment.created_at) %> later<p>

</div>
  

Вот мой код контроллера:

 class CommentsController < ApplicationController

    def create
        @comment = Comment.new(comment_params)
        @comment.article_id = params[:article_id]

        @comment.save

        redirect_to article_path(@comment.article)
    end

    def comment_params
        params.require(:comment).permit(:author_name, :body)
    end
end
  

Комментарии:

1. Как вы используете comment в коде? Является comment переменной экземпляра Comment .Пожалуйста, опубликуйте полный код вашего _comments.html.erb

2. Спасибо… Я только что опубликовал это выше.

3. Является ли comment.article нулевым за шанс?

4. возможно, вы можете использовать t.timestamps вместо 2 объявлений t.datetime в миграциях. Найдите метки времени на странице, на которую вы ссылались здесь.

5. Если вы откроете свой rails console и выполните: Comment.last.article_id — работает ли это?

Ответ №1:

Убедитесь, что это включено в ваш код:

 <%= render partial: 'articles/comment', collection: @article.comments %>
  

/models/comment.rb

 class Comment < ActiveRecord::Base
  belongs_to :article
end
  

Комментарии:

1. У меня есть все это, и это работает — форма комментариев отображается, если я удаляю строку distance_of_time_in_words.