#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
У меня есть модель с именем атрибута Time start_date
. Когда я создаю новый объект в своем контроллере и инициализирую значение time, объект выглядит созданным правильно, когда я просматриваю его в отладчике…
(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
Комментарии:
1. код модели, как вы просили
2. Спасибо. Вам следует сохранить start_time как
datetime
поле, если вы хотите также сохранить дату3. Класс Time также имеет компонент date, ruby-doc.org/core/classes/Time.html
4. В Ruby — да. Но в базе данных — НЕТ. В базе данных хранится только время, но Ruby также возвращает дату, но там нет даты, поэтому дата 01.01.2001
Ответ №1:
ОК. Я понял.
У вас есть
start_date :time
Но вы должны сохранить его как DateTime. Таким образом, было сохранено только время без даты!
Плюс время было сохранено со смещением по умолчанию ( 0000), а не в вашем местном часовом поясе.
Комментарии:
1. в документах api показано, что класс Time имеет компонент date, ruby-doc.org/core/classes/Time.html
2. база данных не хранит объекты Ruby, но свои собственные типы
Ответ №2:
Три вещи :
1) Кажется, что у вас нигде нет attr_accessible, но имейте в виду, что это может привести к этому.
2) Попробуйте сохранить с помощью save! вместо сохранения. Это явно отобразит возможные ошибки проверки модели. В большинстве случаев, когда модель не сохраняется, это происходит из-за ошибок проверки.
3) В вашем случае я бы также проверил, какое время.new(параметры [: турнир]…. вычисляется, вероятно, с помощью консоли rails.
Комментарии:
1. 1) Я обновил модель, чтобы указать доступные атрибуты, 2) Я попытался использовать save! и 3) вы имели в виду ‘Tournament.new(параметры [: турнир])’? Еще раз спасибо!
2. 3) На самом деле я имею в виду что-то вроде распечатки @tourney.start_date на ваш взгляд, чтобы увидеть, что это действительно действительное время.
Ответ №3:
Вам нужен параметр attr_accessible:start_time в вашей модели?
Комментарии:
1. ну, если у него его нет для какого-либо атрибута, это не может действительно вызвать проблему