【问题标题】:undefined method `strftime` for nil:NilClass in chrome & safari but not firefox用于 nil 的未定义方法`strftime`:chrome 和 safari 中的 NilClass 但不是 firefox
【发布时间】:2014-12-22 23:17:49
【问题描述】:

我在 index.html 中为 nil:NilClass 接收未定义的方法 strftime。由于某种原因,此错误存在于 chrome 和 safari 中,但不存在于 firefox 中。任何帮助,将不胜感激。我的模型、控制器和视图中有以下内容:

user_meetup.rb

def self.request(start_date, start_time, location, description)
  transaction do            
    start_time = [start_date, start_time].join(' ').to_time unless start_time.blank?

    meetup1 = UserMeetup.create!(start_time: start_time, location: location, description: description)
    meetup2 = UserMeetup.create!(start_time: start_time, location: location, description: description)
  end
end

def time
  start_time.strftime("%l:%M %P")
end

def date
  start_time.strftime("%B %e,  %Y")
end

user_meetups_controller.rb:

class UserMeetupsController < ApplicationController
  before_filter :authenticate_user!
  respond_to :html, :js

  def index
    @user_meetups = current_user.user_meetups
  end

在我看来,我有以下几点,meetup.date 和 meetup.time 是我得到 NoMethodError: undefined method strftime for nil:NilClass:

<% if current_user.user_meetups.each do |meetup| %>
  <% if meetup.accepted? %>
    <div class="accepted">
      <span class="start-date">scheduled for <%= meetup.date  %> at <%= meetup.time %> at <%= meetup.location %></span>

【问题讨论】:

  • 看起来你的聚会没有开始时间?
  • 你说 meetup.date 和 meetup.time 在 chrome 和 safari 中工作,但在 Firefox 中不工作..我不明白..数据是由 Rails 服务器上的 erb 模板引擎和纯 HTML 呈现的发送到浏览器,浏览器将 html 绘制到它的窗口。这意味着发送到 chrome 和 safari 的 HTML 将与发送到 firefox 的标记相同。简而言之,浏览器不处理 erb 模板。

标签: ruby-on-rails ruby


【解决方案1】:

您需要在视图代码中使用@user_meetups 来访问这些数据,Rails 始终将实例变量从控制器传递到视图。

保重!

【讨论】:

  • 聚会列表正在通过current_user 即current_user.user_meetups 访问,所以这不是这里的问题。
  • 也不知道这是否有帮助,但 meetup.date 和 meetup.time 在 Firefox 中有效,但在 chrome 或 safari 中无效
【解决方案2】:

下面这一行是错误的

 def self.request(start_date,...) do

    start_time = [start_date, start_time].join(' ').to_time unless start_time.blank? # <= This line
    ...
  end

当 start_time 为nil 或"" 时,它不会被分配。

由于变量 start_time 为空白,您可能正在寻找: start_time = [start_date, start_time].join(' ').to_time

一般来说,我会避免对局部变量(用作start_date =)使用属性名称(此处使用[start_date, ...])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多