我有一个名为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
答案 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?