2012-01-13 19 views
2

いくつかの属性を指定してモデルオブジェクトをインスタンス化したいと思います。インスタンス属性を使用してモデルオブジェクトをインスタンス化する方法は?

post = Post.new 

0にpost.vote_total設定する必要があり、私はinitializeメソッドでこれを実行しようとしましたが、それは働いていないようです:

def initialize() 
    vote_total=0 
end 

は事前にお願いします。

答えて

7

のように、オブジェクトにハッシュ属性を渡します。あなたはRuby on Railsにに新しいしている場合

post = Post.new(:vote_total => 123, :author => "Jason Bourne", ...) 

、あなたはおそらくこれと、より多くをカバーしていGetting Started Guideを、読むことをお勧めします便利なRailsのイディオムについて詳しく説明します。

+0

ありがとう、はい私はこれを例として使用しましたが、私がそのようなVote.new(投稿)を自動的にvote_total増加する必要があるようなより洗練されたinstanciationsをしたい場合はどうしますか? – user1144442

+0

その場合、Vote.add_post(post)のように、あなたのVoteモデルでメソッドを作るほうが意味があり、内部的に 'add_post'メソッドはvote_totalを増やすことができます。 – MrDanA

2

私はコールバックを使用します。 Available Callbacks

class Post 
    before_save :set_defaults 

    def set_defaults 
     self.vote_total ||= 0 
     #do other stuff 
    end 
end 
0

あなたは

class AddColumnWithDefaultValue < ActiveRecord::Migration 
    def change 
    add_column :posts, :vote_total, :integer, :default => 0 
    end 
end 

または既存のテーブルのための店のデフォルト値にデータベースを可能性があります:

class ChangeColumnWithDefaultValue < ActiveRecord::Migration 
    def up 
    change_column_default(:posts, :vote_total, 0) 
    end 
    def down 
    change_column_default(:posts, :vote_total, nil) 
    end 
end 

ありますしかし、多くの議論のためにstoring default values in the database

関連する問題