Ruby on rails Rails AR无法更新空datetime字段

Ruby on rails Rails AR无法更新空datetime字段,ruby-on-rails,Ruby On Rails,我使用的是Rails 3.1。我有一个数据库列t.datetime“end_at”。如果在创建对象时输入日期,则可以稍后更改值(更新)。但是如果我把它留空(NULL),我发现我无法更新它。我验证了字段的名称和新值是否在参数中。为什么? def update begin model = MyModel.find(params[:id]) model.update_attributes!(params[:my_model]) rescue ActiveRecord:

我使用的是Rails 3.1。我有一个数据库列t.datetime“end_at”。如果在创建对象时输入日期,则可以稍后更改值(更新)。但是如果我把它留空(NULL),我发现我无法更新它。我验证了字段的名称和新值是否在参数中。为什么?

 def update
   begin
     model = MyModel.find(params[:id])
     model.update_attributes!(params[:my_model])
   rescue ActiveRecord::RecordNotFound => e
      #something
   end
 end

您需要确保两件事是真实的:

  • 参数[:end_at]
    必须包含nil或DateTime。通常参数不作为日期时间输入
  • 您的列不应该是时间戳(但情况可能已经不是这样了)

还要调查多参数属性。

有错误吗?在结束时对
进行任何验证?无错误。我没有任何验证。我实际上有两个字段“开始”和“结束”。如果我在创建对象时填充“start_at”并回来编辑记录,我可以将start_at更改为新日期,但不能将end_at从NULL更改为其他任何内容。您可以从日志中发布
params
吗?参数:{“id”=>“5327”,“my_model”=>{“group”=>“Beauty”,“name”=>“some”,“end_at”=>“03/20/13 03:39 PM”,“state”=>“1},“提交”=>“保存”、“utf8”=>“?”}这是验证。当我使用update_属性绕过验证时,它被保存。我没有费心将参数转换为DateTime对象。但为什么只有当字段为空时才会发生这种情况,我仍然不明白。在我将参数转换为DateTime对象并更新参数后,update_属性也可以工作。