0

我最近涉足 Ruby(在 Rails 上),但现在我陷入了困境。

我在 中创建了一个名为 Habit 的类habit.rb,如下所示。

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):

  1. star_monkey = Habit.create(name: "draw star")
  2. 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}正确的值如何,但记录没有“保存”正确的值?其次,我将如何解决这个问题?

4

2 回答 2

0

出于某种原因,使用以下设置属性有效。

self[:attribute] = "value"

于 2013-10-20T00:49:56.737 回答
0

在控制台中,您使用的create方法会使用提供给它的值自动保存新对象。如果使用new,则不会保存对象。如果要检查,请尝试在使用createandnew方法时查看对象的 id。你会看到不同之处。使用create时会自动保存 id ,但使用new时不会保存,除非使用object.save. 谢谢

于 2013-10-14T21:45:00.130 回答