Это сбивает меня с толку.
В задаче rake я сохраняю новые записи в модели DailyScore с помощью следующего кода:
def save_record_as_daily_score_object(data)
@ds = DailyScore.where(date: data[:date]).first_or_create!
@ds.update!(data)
binding.pry
end
Вывод pry выглядит следующим образом:
[10] pry(main)> data
=> {:date=>"2015-09-02",
:mail=>-0.6,
:times=>-7.1,
:telegraph=>-2.2,
:guardian=>-4.0,
:express=>-0.1,
:independent=>-3.2,
:average=>-3.4}
[11] pry(main)> @ds
=> #<DailyScore:0x000001098121a8
id: 4975,
mail: nil,
telegraph: nil,
times: nil,
average: nil,
guardian: nil,
independent: nil,
express: nil,
date: nil,
created_at: 2016-05-16 13:10:03 UTC,
updated_at: 2016-05-16 13:10:03 UTC>
[12] pry(main)> @ds.average
=> -3.4
[13] pry(main)> @ds.date
=> "2015-09-02"
[14] pry(main)> @ds.persisted?
=> true
[15] pry(main)> DailyScore.last
=> #<DailyScore:0x000001086810d8
id: 4975,
mail: nil,
telegraph: nil,
times: nil,
average: nil,
guardian: nil,
independent: nil,
express: nil,
date: nil,
created_at: 2016-05-16 13:10:03 UTC,
updated_at: 2016-05-16 13:10:03 UTC>
[16] pry(main)> DailyScore.last.average
=> nil
Что здесь происходит? Почему Pry не может получить доступ к моим переменным атрибутам? А запись на самом деле сохраняется или нет?
ОБНОВЛЕНИЕ: при проверке в консоли поведение такое же, если я просто создаю новый объект. Я использую фреймворк Padrino и базу данных Postgres.
2.0.0 :001 > ds = DailyScore.new(date:"2016-01-01")
=> #<DailyScore id: nil, mail: nil, telegraph: nil, times: nil, average: nil, guardian: nil, independent: nil, express: nil, date: nil, created_at: nil, updated_at: nil>
2.0.0 :002 > ds.date
=> "2016-01-01"
2.0.0 :003 > ds
=> #<DailyScore id: nil, mail: nil, telegraph: nil, times: nil, average: nil, guardian: nil, independent: nil, express: nil, date: nil, created_at: nil, updated_at: nil>
Проблема в модели? Вот оригинальная миграция:
006_create_daily_scores.rb
class CreateDailyScores < ActiveRecord::Migration
def self.up
create_table :daily_scores do |t|
t.float :average
t.datetime :date
t.float :express
t.float :independent
t.float :guardian
t.float :telegraph
t.float :mail
t.float :times
t.timestamps
end
end
def self.down
drop_table :daily_scores
end
end
Теперь добавили еще один столбец день: дата - используя: дату вместо: дату и время - чтобы проверить, не было ли это причудой с: дата и время, но поведение такое же.
@ds.valid?
- person Anthony E   schedule 16.05.2016first_or_create!
? - person Petr Gazarov   schedule 16.05.2016save_record_as_daily_score_object
? В рейк-файле? В модели? Я не наблюдаю такого поведения под рельсами, если метод находится в модели или в грабли. Но, судя по тегам, ваш сценарий может быть более сложным? - person BoraMa   schedule 16.05.2016attr_accessor
в своей модели? Если это так, вы должны удалить его, потому что он переопределяет атрибуты. - person Petr Gazarov   schedule 21.05.2016