【问题标题】:Rails: undefined method `strftime' for nil:NilClass, but value (without strftime) returns OKRails:nil:NilClass的未定义方法`strftime',但值(没有strftime)返回OK
【发布时间】:2010-12-25 19:34:25
【问题描述】:

我对(rails 3)activerecord 查询有一个奇怪的问题。

如果我将查询 #1(下)提交到视图(下),一切正常...但如果我提交查询 #2(下),我会得到“nil:NilClass 的未定义方法 `strftime'”

...但是,如果我从查询 #2 中删除 strtime 字符串,它会返回未格式化的时间就好了。

"Professional specialities"是一个has_many :through table;我假设这与它有关......但我无法弄清楚是什么。

知道发生了什么吗?感谢所有建议:

查询 #1(工作正常)

@professionals = Professional.all(:include => :user, :conditions => ["users.first_name = ? AND users.last_name = ?", params[:name][:first], params[:name][:last]])

查询 #2(中断 strtime)

 @professionals = Professional.all(:include => [:user, :professional_specialties], :conditions => ["professional_specialties.profession_type_id = ?", params[:profession_type]] )

查看

<% @professionals.each do |p| %>
  <tr>
    <td><%= link_to("%s %s" % [p.user.first_name, p.user.last_name], p) %></td>
    <td><%= p.business %></td>
    <td><%= p.user.role.name %></td>
    <td><%= p.user.created_at %></td>
    <td><%= p.user.last_sign_in_at.strftime("%Y") %></td>
  </tr>

<% end %>

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-3 strftime


    【解决方案1】:

    我最好的猜测是这两个查询会为您提供不同的结果集。在第二个结果集中,一个或多个用户的 last_sign_in_at 列具有 NULL 值。

    在 Rails 控制台中运行 Professional.all(...).map(&amp;:users)(在您的应用程序目录中运行 rails console),并仔细检查它们是否都有有效的时间戳。

    【讨论】:

    • @Zabba:我想你的意思是&lt;%= p.user.last_sign_in_at.try(:strftime, "%Y") %&gt;
    • 是的,我就是这个意思。删除了我的评论。
    • 啊——当然。非常感谢,有一个值为 nil 的隐藏条目。
    • 不应该 nil.strftime 返回 nil 而没有错误消息吗?否则我们需要设置 unless nil 条件,这很烦人......
    • @Augustin 绝对不是。 strftime 不是 nil 的有效方法。将Time 中的方法添加到nil 是一个非常糟糕的主意,因为你会在哪里画线? StringArray 呢?按照这个逻辑,nil.downcasenil.first 不应该也返回 nil 而没有错误消息吗?
    猜你喜欢
    • 2018-12-19
    • 2013-07-16
    • 2017-01-01
    • 2012-10-08
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多