Rails 4.1 undefined方法`ordinary_start_time'代表nil:NilClass

时间:2017-01-25 10:57:14

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

我有一个表单,它会创建默认时间为下午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,而是想用我的区域表中的ordinary_start_time字段替换它

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提供了未定义的方法`ordinary_start_time':NilClass

也尝试了

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

2 个答案:

答案 0 :(得分:1)

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

@area不是您视图中Area类的实例,而是nil,并且usual_start_time没有定义nil

答案 1 :(得分:0)

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

您是否要更改Happening模型上的started_at的属性值?如果是这样,你可以在Happening #create方法中做到这一点,并且只做@ happenning.started_at = 18:45