Rails Postgres - 日期时间值不会保存到Datetime列中

时间:2013-07-05 11:47:02

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

我的模型有一个日期时间属性(Postgres),我试图通过我的Rails应用程序中的表单提交创建一个新记录。

我提交的表单包含该datetime属性的text_field。它以下面的格式提交日期时间作为参数:

"expires"=>"07/17/2013 12:35:26 PM"

但是,一旦它进入我的模型的创建操作中的第一行代码......

def create
  @special_deal = SpecialDeal.new(params[:special_deal])

......大部分时间,@ special_deal.expires将= nil。很少,它是否有效。

我无法弄清楚为什么会这样。我猜它与在日期时间值内包含AM或PM有关,但我不确定。

params每次都包含到期值:

    @_params    
{"utf8"=>"✓", "authenticity_token"=>"cl1SwnHOum8d/kiGnwkDsamG5IMbmdnoeFvlY11KpKc=", "special_deal"=>{"title"=>"", "provider"=>"", "description"=>"", "deal_price"=>"", "conditions"=>"", "expires"=>"07/27/2013 14:23:59", "excerpt"=>"", "original_price"=>"", "phone_number"=>"", "street"=>"", "city"=>"", "postal_code"=>"", "state"=>"", "country"=>""}, "commit"=>"Create Special deal", "action"=>"create", "controller"=>"special_deals"}

但是@special_deal没有:

    @special_deal   
#<SpecialDeal id: nil, man_servant_id: nil, category: "", title: "", excerpt: "", description: "", original_price: nil, deal_price: nil, provider: "", product_link: "", conditions: "", phone_number: "", street: "", city: "", postal_code: "", state: "", country: "", public: true, created_at: nil, updated_at: nil, expires: nil, image_file_name: nil, image_content_type: nil, image_file_size: nil, image_updated_at: nil>

2 个答案:

答案 0 :(得分:2)

尝试将这些放入create方法中:

logger.error params[:special_deal].class
logger.error params[:special_deal].to_datetime

或使用调试程序对其进行调查。

它似乎无法正确转换为日期时间。

在此之后你会得到一个明确的暗示。

答案 1 :(得分:2)

它将被设置为明显为零,因为 params [:special_deal] [:expires] 不包含有效格式。无论您的表单是否包含text_field或字符串。重要的是您发送的格式,同时创建新的特殊交易。 如果您操作过期字段并形成标准日期时间格式,您的代码将起作用。无论是字符串对象还是日期时间对象。

日期时间的标准数据库格式为 YYYY-MM-DD HH:MM:SS

因此,在创建新的特殊交易之前,您必须操纵过期

"expires"=>"07/17/2013 12:35:26 PM"

"expires"=>"2013-07-17 12:35:26"

在操纵它时不要忘记考虑Meridiem。这将解决您的问题。