Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 零能';不能转换为时间值_Html_Ruby On Rails_Ruby - Fatal编程技术网

Html 零能';不能转换为时间值

Html 零能';不能转换为时间值,html,ruby-on-rails,ruby,Html,Ruby On Rails,Ruby,我正在建立一个基本的聊天室网站,其中有多个聊天室,用户可以对其进行评论 我设法让我的信息/评论显示在每个房间。显示页面,但当我进入时 <p><%= message.user.name if message.user %> <small><em><%= "#{time_ago_in_words(message.created_at)} ago" %></em></small></p> 这是我的文件

我正在建立一个基本的聊天室网站,其中有多个聊天室,用户可以对其进行评论

我设法让我的信息/评论显示在每个房间。显示页面,但当我进入时

<p><%= message.user.name if message.user %> <small><em><%= "#{time_ago_in_words(message.created_at)} ago" %></em></small></p>
这是我的文件

    Rails.application.routes.draw do
        devise_for :users
        #resources :messages
        resources :users
        resources :rooms do
          resources :messages
        end

        root 'rooms#index'

    end
Message.rb

        class Message < ApplicationRecord
           belongs_to :user
           belongs_to :room
        end
类消息
和room.rb

          class Room < ApplicationRecord
             has_many :message
          end
教室

使用更新版本的rails。

消息。在
处创建的是
nil
。您可以通过稍微更改代码来验证:

<%= "#{time_ago_in_words(message.created_at || Time.now)} ago" %>
这不会显示任何内容,因为在
处创建的
message.u是
nil

<%= "#{time_ago_in_words(message.created_at)} ago" if message.created_at %>
我建议您使用调试库来帮助您解决这个问题。你可以这样做:

<% @message.each do |message| %>
  <div class="row">
    <% binding.pry unless message && message.created_at %>
    <p><%= message.user.name if message.user %> <small><em><%= "#{time_ago_in_words(message.created_at)} ago" %></em></small></p>
    <p><%= message.body %></p>
  </div>
<% end %>
您还应该检查您的
schema.rb
,以确保
消息
模型具有以下内容:

t.datetime "created_at", null: false
t.index ["room_id"], name: "index_messages_on_room_id"
第一个是必需的,因为没有它,
消息。在
处创建的将根本不存在,第二个是两个模型之间的关联所必需的

您的控制器代码没有任何意义,我假设您手动将其输入到问题中,而不是复制和粘贴它。您将
@rooms
定义为
ActiveRecord::Relation
集合对象,但调用
@rooms.message
。如果您的意思是
@rooms.message
,那么这将不起作用,因为您试图对集合调用实例方法。我不知道你在这里是什么意思,因为代码没有意义

此外,您没有实现一个。您的
消息
控制器的
显示
方法应用于呈现单个
消息
对象,而不是呈现房间消息的集合

一般来说,您键入的代码、结构和示例存在许多问题。但至少,您必须确保在尝试用文字调用时间之前,在
处创建的
message.created\u不是
nil
,并且所有这些都可以追溯到:

  • 确保您的模型正确形成并相互关联
  • 确保控制器正在获取真实对象
  • 确保视图在这些真实对象上进行了适当的迭代

应该是
有很多:消息,不是吗?不幸的是,这并没有解决问题。谢谢你注意到这一点!我已经在代码中更正了它,但仍然收到相同的零错误。您确定在
值处创建了
mesage.created\u吗?你能证明它不是零吗?@SheldonBishop你能更新你当前的代码来回答这个问题吗?我将进一步调查。我建议您查找您的迁移,它是否有
时间戳
。另外,您是否尝试在
rails控制台中获取值,以确保存储值。我添加了“| | Time.now”,它使所有内容都以正确的时间显示!非常感谢您的帮助。@SheldonBishop我认为它显示的时间不正确,这不是我给您的解释。我认为你没有抓住我提供的答案的要点,我认为你没有找到真正的解决办法。我建议你仔细重读我的帖子。我仔细阅读了你所说的内容,非常感谢你的深入解释。到目前为止,正确显示了创建评论的时间:2天前、1天前、24分钟前,等等。。。同样是的,我为我的信息控制器发布的代码实际上是我的房间控制器代码——也许这就是为什么它没有意义。我检查了我的模式文件,您建议的所有字段都存在。我已经安装了“再见虫”宝石。这样行吗?还是你认为我应该用pry?我不熟悉它,但如果你认为它更好,我很乐意尝试。再次感谢您的帮助,我正在查看我的房间控制器,试图按照建议使其更干燥。但是,当我将其从“message=room.messages”切换到“message=room.message”时,我收到了未定义的方法错误。我最初是这样做的,但意识到如果我使用messages vs message,它不会返回错误。我很高兴学习正确的方法,因为这将帮助我不仅仅是一个快速修复!
<% @message.each do |message| %>
  <div class="row">
    <% binding.pry unless message && message.created_at %>
    <p><%= message.user.name if message.user %> <small><em><%= "#{time_ago_in_words(message.created_at)} ago" %></em></small></p>
    <p><%= message.body %></p>
  </div>
<% end %>
class Room < ApplicationRecord
  has_many :messages
end
t.datetime "created_at", null: false
t.index ["room_id"], name: "index_messages_on_room_id"