Ruby on rails 为什么我能';不要改变模式';初始化Rails模型时的属性值?

Ruby on rails 为什么我能';不要改变模式';初始化Rails模型时的属性值?,ruby-on-rails,activerecord,initialization,Ruby On Rails,Activerecord,Initialization,这里有一个快速的问题,我有两个模型,如下所示,当我创建一个新的问题模型实例时,它的post_类型attr是nil。 但是当我用rails c尝试时,我可以看到它的值为1,当我保存模型时,它的值仍然为零。 有什么解释吗 class Post < ActiveRecord::Base POST_QUESTION = 1 end class Question < Post def initialize p "post_type=#{@post_type}" @

这里有一个快速的问题,我有两个模型,如下所示,当我创建一个新的问题模型实例时,它的post_类型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
class Post
Rails将通过单表继承为您处理类似的事情。在
posts
表中需要一个
“type”
字符串列

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

class Question < Post
  #...
end
class Post
您创建的任何问题都将保存到posts表中,类型为
“question”

是否有理由要求post类型为整数


无论如何,它不能像您所写的那样工作的原因是所有的模型属性都存储在一个名为
@attributes
的实例变量中。从数据库加载对象后,您可以使用其他实例变量,但ActiveRecord不会注意这些变量。

您在控制台中做什么来检查这些值?我在initialize方法中添加了2条print语句(与问题一样),它首先打印“post_type=”然后“post_type=1”。但是当我保存对象时,它被保存为post类型列的零值。请参见下面,实例变量(
@post\u type
)与ActiveRecord属性不同(
o.post\u type=…
o.post\u type
)。将其改为@post\u类型是愚蠢的错误。谢谢谢谢你的回答。对不起,我没有提到,我在posts表中有一个post_类型列。没有理由选择整数类型,它可能是字符串。但这不是重点,我有post_类型attr。但即使我从问题模型创建了一个新实例,它的post_type attr是nil,而不是1。实际上这并不是因为表中没有“type”列,而是我错误地将其写成@post_type而不是self.post_type。最后一段你是对的,rails把它当作不同的实例变量。谢谢正确的。我是说要使用内置的单表继承,AR需要一个“type”列。如果你自己滚动,那么你的方式也会起作用。