Ruby / Rails实例变量不在对象中

时间:2013-10-14 21:38:25

标签: ruby-on-rails ruby

我最近涉足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中):

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

2 个答案:

答案 0 :(得分:0)

在控制台中,您使用的是create方法,该方法会自动使用提供给它的值保存新对象。如果您使用new,则不会保存该对象。如果要检查,请在使用createnew方法时尝试查看对象的ID。你会看到差异。当您使用create时,它会自动保存并带有ID,但是当您使用new时,除非您使用object.save,否则它将无法保存。 感谢

答案 1 :(得分:0)

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

self[:attribute] = "value"