Rails无法使用正确的日期格式保存到数据库

时间:2015-06-01 16:04:20

标签: ruby-on-rails

我已将下面的代码段添加到我的config / locales / en.yml文件中:

en:
  date:
    formats:
      default: '%m/%d/%Y'

每当我将JSON POST / PUT发送到服务器&我的Rails API包含一个日期,我以这种格式发送它:10/20/2015这是m / d / Y.

我使用MySQL作为我的RDBMS,并将其存储为2015-10-20 Y-m-d

我在Rails提交数据之前尝试在我的Rails控制器中运行Date.strptime(value, '%m/%d/%Y'),但我不断收到invalid date错误。

当我在2015年12月10日或2015年10月10日发送时,它会进入。它将其解释为d / m / Y,因此当中间数小于13时可以正常工作。

这是什么解决方案?

编辑:

在我的控制器中,我有这种方法来转换日期:

def contract_party_params
    if params[:contract_party][:birthdate]
        params[:contract_party][:birthdate] = Date.strptime(params[:contract_party][:birthdate], '%m/%d/%Y').strftime('%Y-%m-%d')
    end

    params.require(:contract_party).permit(:birthdate)
end

编辑:

Rails服务器输出

Parameters: {"contract_party"=>{"birthdate"=>"10/20/1990"}}

1990-10-20
ArgumentError (invalid date):
  app/controllers/contract_parties_controller.rb:60:in `strptime'
  app/controllers/contract_parties_controller.rb:60:in `contract_party_params'
  app/controllers/contract_parties_controller.rb:23:in `create'

控制器方法:

def create
    @contract_party = ContractParty.new(contract_party_params)

    if @contract_party.save
        render :json => @contract_party, 
                     :status => :created, 
                     :location => @contract_party
    else
        render json: @contract_party.errors, status: :unprocessable_entity
    end
end

1 个答案:

答案 0 :(得分:0)

我希望这会奏效,

Rails控制台中试用。

Time.strptime("1990-10-20", "%Y-%m-%d").strftime("%Y-%m-%d")

#Output

"1990-10-20"

在控制器中试试这个。

def create
  contract_party_params[:birthdate] = Time.strptime(contract_party_params[:birthdate], "%m/%d/%Y").strftime('%Y-%m-%d')

  @contract_party = ContractParty.new(contract_party_params)

  if @contract_party.save
    render json: @contract_party, status: :created, location: @contract_party
  else
    render json: @contract_party.errors, status: :unprocessable_entity
  end
end


private
def contract_party_params
  params.require(:contract_party).permit(:birthdate)
end

以下是 Strftime http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime

的链接