Rails 4.1 nil:NilClass 的未定义方法“usual_start_time”

Rails 4.1 undefined method `usual_start_time' for nil:NilClass

我有一个创建下午 6 点 45 分默认时间的表单。创建新表单时

_form.html.erb

 = f.input :started_at, as: :string, class: 'form-control', input_html: { value: l(@happening.started_at, format: :date_time_picker), class: 'date_time_picker' }, label: "Start at"

但我不想在事件控制器中显示 1845,而是想用我所在区域的 usual_start_time 字段替换它 table

scheme.rb

create_table "areas", force: :cascade do |t|
    t.string  "deprecated__default_postcode", limit: 255
    t.integer "number_of_runners_needed",                 default: 100,     null: false
    t.string  "referral_partners_logo_image"
    t.integer "address_id"
    **t.string  "usual_start_time",                         default: "18:45"**
  end

我试过使用

time = DateTime.strptime((Date.today + 1.day).to_s + ' ' + **"#{@area.usual_start_time}"**, '%Y-%m-%d %H:%M')

但它为 nil:NilClass

提供了未定义的方法 `usual_start_time'

也试过

time = DateTime.strptime((Date.today + 1.day).to_s + ' ' + **"#{@area.happenings.usual_start_time}"**, '%Y-%m-%d %H:%M')

happenings_controller.rb(想替换“18.45”

  def new
    @type = params[:type].underscore
    time = DateTime.strptime((Date.today + 1.day).to_s + ' ' + **"18:45"**, '%Y-%m-%d %H:%M')
    @happening = Happening.new(started_at: time)
  end

这只是意味着 @area 未在您的控制器中初始化。

在您看来,

@area 不是 Area class 的实例,它是 nil,并且没有为 [=13 定义 usual_start_time =].

错误消息表明您的@area 实例变量未在任何地方设置并且返回 nil。

是否要更改 Happening 模型上 started_at 的属性值?如果是这样,您可以在 Happening#create 方法中执行此操作,只需执行 @happening.started_at = 18:45