(保存日期时,未定义的方法`year' for nil:NilClass)

时间:2018-02-01 16:18:52

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

我在rails app上有一个红宝石。我将date_field添加到视图中以添加/编辑日期。问题是我有保存和更新新日期的问题,但它将日期从变量带到表单(编辑),并在编辑日期和肌酸后新日期。它没有回到主页或有保存问题。正如我在控制台params中看到的,我的日期变量(start)在用户选择新日期时发生了变化,但之后没有加载第一页,我收到了这个错误:

    F, [2018-02-01T16:03:44.784113 #723] FATAL -- : 
NoMethodError (undefined method `year' for nil:NilClass):
  app/controllers/weeks_controller.rb:27:in `create'

这是我的表单页面,其中显示了要编辑的日期:

 .form-group
    = f.label :course
    = @course.name
  .form-group.form-inline
    = f.label :start
    = f.date_field :start, as: :date, value: f.object.try(:strftime,"%m/%d/%Y"), class: 'form-control'
    //= f.date_select :start, {}, { :class => "form-control" }
  .actions
    = f.submit 'Save', :class => "btn btn-primary"

关于控制器的错误说明。但是我没有任何一年的'控制器中的方法:

 def create
     @week = Week.new(week_params.merge(course_id: @course.id))
     respond_to do |format|
     if @week.save
         format.html { redirect_to '/weeks', notice: 'was successfully created.' }
         format.json { render action: 'show', status: :created, location: @week }
       else
         format.html { render action: 'new' }
         format.json { render json: @week.errors, status: :unprocessable_entity }
       end
     end
  end



 def update
     respond_to do |format|
       if @week.update(week_params)
        format.html { redirect_to '/weeks', notice: 'starting week was successfully updated.' }
        format.json { head :no_content }
       else
         format.html { render action: 'edit' }
         format.json { render json: @week.errors, status: :unprocessable_entity }
       end
     end
   end

weeks_params定义如下:

def week_params
      params.require(:week).permit(:start, :course_id)
    end

我首先遇到使用date_select显示日期的问题,但是现在使用date_field显示了这一点,但我不知道此错误所指的位置。如果有人帮助我,我将感激不尽。

模型是:

class Week < ActiveRecord::Base
    belongs_to :course
    has_many :assessments

    def select_name
        start.strftime("Week of %b %d")
    end
end

0 个答案:

没有答案