为什么我在初始化Rails模型时无法更改模型的属性值?

时间:2012-10-14 04:12:01

标签: ruby-on-rails activerecord initialization

这是一个简单的问题,我有两个模型如下,当我创建一个新的Question模型实例时,它的post_type attr是nil。 但是当我尝试使用rails c时,我可以看到它获得值1,当我保存模型时,它的值仍为零。 有什么解释吗?

class Post < ActiveRecord::Base
  POST_QUESTION = 1
end


class Question < Post
  def initialize
    p "post_type=#{@post_type}"

    @post_type = Post::POST_QUESTION
    super

    p "post_type=#{@post_type}"

  end
end

1 个答案:

答案 0 :(得分:1)

Rails将使用单表继承处理这样的事情。您需要"type"表中的posts字符串列。

class Post < ActiveRecord::Base
  #...
end

class Question < Post
  #...
end

您创建的任何问题都将保存到类型为"Question"的帖子表中。

您是否有理由要求帖子类型为整数?

无论如何,它写不起来的原因是所有的模型属性都存储在一个名为@attributes的实例变量中。虽然从数据库加载对象后可以使用其他实例变量,但ActiveRecord不会关注它们。