0

ここに簡単な質問があります。次の2つのモデルがあります。質問モデルの新しいインスタンスを作成すると、そのpost_typeattrはnilになります。しかし、rails cでそれを試してみると、値1が得られ、モデルを保存しても、その値はnilのままであることがわかります。説明はありますか?

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
4

1 に答える 1

1

Railsは、単一テーブル継承を使用してこのようなことを処理します。テーブル"type"に文字列列が必要です。posts

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

class Question < Post
  #...
end

作成した質問はすべて、タイプが.の投稿テーブルに保存されます"Question"

投稿タイプを整数にする必要がある理由はありますか?

とにかく、あなたが書いたようにそれが機能しない理由は、すべてのモデル属性がと呼ばれるインスタンス変数に格納されているためです@attributes。オブジェクトがデータベースからロードされると、他のインスタンス変数を使用できますが、ActiveRecordはそれらに注意を払いません。

于 2012-10-14T04:32:04.263 に答える