2013-03-20 112 views
0

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

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

有没有错误?对'end_at'的任何验证? – codeit 2013-03-20 16:58:05

+0

没有错误。我没有任何验证。我实际上有两个字段“start_at”和“end_at”。如果我在创建对象时填充“start_at”并回来编辑记录,我可以将start_at更改为新日期,但我无法将NULL从end_at更改为其他任何内容。 – kimkunjj 2013-03-20 17:02:08

+0

你可以从你的日志发布'params'吗? – codeit 2013-03-20 17:04:27

回答

1

你需要确保两件事情是真的:

  • params[:end_at]必须包含零或日期时间。通常params不会像日期时间一样进来。
  • 您的列不应该是一个TIMESTAMP(但这可能并非如此的话)

还调查多参数属性。

+0

这是验证。当我使用绕过验证的update_attribute时它会被保存。我没有打扰将参数转换为DateTime对象。但是为什么只有当字段为NULL时才会发生,我仍然不明白。在将param转换为DateTime对象并更新参数后,update_attributes也可以工作。 – kimkunjj 2013-03-20 23:52:43