我最近涉足了Ruby(在Rails上),现在我陷入了困境。
我在habit.rb
中创建了一个名为 Habit 的类,如下所示。
require 'date'
class Habit < ActiveRecord::Base
attr_reader :created_at, :start
attr_accessor :name, :record
belongs_to :user
after_initialize do
@name = name
@record = []
@start = Date.today.yday()
@created_at = Time.now()
end
end
重现问题的步骤(rails console --sandbox
):
-
star_monkey = Habit.create(name: "draw star")
-
star_monkey
这将返回#<Habit id: 1, name: nil, days: nil, start: nil, created_at: nil, updated_at: "2013-10-14 21:32:35">
。
但是,当我显式请求实例变量(如@name
、@record
或@start
)时,会返回正确的值。
star_monkey.name # returns "draw star"
star_monkey.record # returns []
star_monkey.start # returns 287
我的问题是:为什么star_monkey.#{variable}
是正确的值,但记录没有"保存"正确的值?其次,我将如何补救?
在控制台中,您正在使用 create
方法,该方法会自动保存新对象及其提供的值。如果使用 new
,则不会保存对象。如果要检查,请尝试在使用create
和new
方法时查看对象的 id。你会看到差异。当您使用create
时,它将自动保存其中的id,但是当您使用new
时,除非您使用object.save
,否则它不会保存。谢谢
由于某种原因,使用以下设置属性起作用。
self[:attribute] = "value"