【问题标题】:undefined method `strftime' for nil:NilClass [rails 4]nil:NilClass [rails 4]的未定义方法`strftime'
【发布时间】:2013-07-16 14:29:24
【问题描述】:

快速分解我的应用程序:我有一个歌曲、cmets 和用户模型。用户可以上传歌曲,制作cmet。

提交(创建)歌曲后,我似乎收到“nil:NilClass 的未定义方法 `strftime'”错误。如果您转到show#songs.html.erb,您将看到下面的 cmets 代码。我研究了 Ryan Bates 如何做他的 cmets 并且我的代码是相同的。不知道为什么 strftime 不起作用。请指教:)

注意:为了它的价值,我正在运行 rails 4

完整的错误信息:

NoMethodError in Songs#show

Showing /Users/apane/Downloads/leap/app/views/songs/show.html.erb where line #34 raised:

undefined method `strftime' for nil:NilClass

Extracted source (around line #34):

<% for comment in @song.comments %>
<div class="comment">
<strong><%= link_to_unless comment.site_url.blank?, h(comment.author_name), h(comment.site_url) %></strong>
<em>on <%= comment.created_at.strftime('%b %d, %Y at %H:%M') %></em>
<%=simple_format comment.content %>
<p>
<% if can? :update, comment %>

【问题讨论】:

  • created_at 不起作用。可能的原因是您没有在 Comment 模型中自动填充该字段(因此在数据库中为 NULL,在 Ruby 中为 nil)。
  • Neil,我怎样才能自动填充它?有没有我应该添加到控制器的代码行?

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

comment.created_at 是nil - 这是你的问题。 可能是因为您已创建评论但尚未保存 . created_at 字段只会在保存时填写。

【讨论】:

  • 我已将这行代码添加到songs_controller "@comment = @song.cmets.build" 中,正如您所指出的,这就是问题所在。如何保存 cmets?如果@comment.save 等……也许?
  • 嗨,我可以给你的一个建议是生成一个新的应用程序,创建一些脚手架 - 例如'rails generate scaffold Comment user:integer content:string' - 然后检查生成的代码看看事情应该如何运作 - 我认为这可能是一个很好的教训 - 享受:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
相关资源
最近更新 更多