Rails 3:为什么我的Time属性没有正确保存到DB中?

时间:2011-04-22 20:15:14

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

我有一个名为start_date的时间属性的模型。当我在控制器中创建一个新对象并初始化时间值时,当我在调试器中查看它时,该对象看起来是正确创建的......

(rdb:75) p @tourney
#<Tournament id: nil, created_at: nil, updated_at: nil, start_date: "2011-04-22 20:05:00", duration_in_mins: 30, winners_name: nil>

但在将其保存到数据库后,start_date值错误并设置为默认值....

#<Tournament id: 5, created_at: "2011-04-22 20:07:56", updated_at: "2011-04-22 20:07:56", start_date: "2000-01-01 01:05:00", duration_in_mins: 30, winners_name: nil>

这是我的控制器代码......

def create

    @tourney = Tournament.new(params[:tournament]) 
    @tourney.start_date = Time.new(params[:date][:year], 
                         params[:date][:month], 
                         params[:date][:day], 
                         params[:date][:hour], 
                         params[:date][:minute])

    debugger
    if @tourney.save 
      redirect_to dashboard_path, :notice => "Tournament Created Successfully"
    else
      redirect_to dashboard_path, :notice => "Tournament Creation Failed"
    end

  end

非常感谢你的智慧!

我的型号代码......

# Table name: tournaments
#
#  id               :integer         not null, primary key
#  created_at       :datetime
#  updated_at       :datetime
#  start_date       :time
#  duration_in_mins :integer
#  winners_name     :string(255)
#

class Tournament < ActiveRecord::Base

  has_many :participants, :dependent => :destroy

  attr_accessible :start_date, :duration_in_mins

  validates :start_date, :presence => true

end

3 个答案:

答案 0 :(得分:2)

确定。我懂了。

你有

start_date       :time

但是你应该把它存储为DateTime。 所以只有时间存储没有日期!

加时间以默认偏移(+0000)保存,而不是在您当地的时区。

答案 1 :(得分:0)

三件事:

1)似乎你在任何地方都没有attr_accessible,但要记住它可能导致这种情况。

2)尽量保存!而不是保存。这将明确地呈现可能的模型验证错误。大多数情况下,当未保存模型时,这是因为存在验证错误。

3)在你的情况下,我还会检查Time.new(params [:tournament] ....被评估的内容,可能使用rails console。

答案 2 :(得分:0)

您是否需要模型中的attr_accessible:start_time?