いくつかの属性を指定してモデルオブジェクトをインスタンス化したいと思います。インスタンス属性を使用してモデルオブジェクトをインスタンス化する方法は?
post = Post.new
0にpost.vote_total設定する必要があり、私はinitializeメソッドでこれを実行しようとしましたが、それは働いていないようです:
def initialize()
vote_total=0
end
は事前にお願いします。
いくつかの属性を指定してモデルオブジェクトをインスタンス化したいと思います。インスタンス属性を使用してモデルオブジェクトをインスタンス化する方法は?
post = Post.new
0にpost.vote_total設定する必要があり、私はinitializeメソッドでこれを実行しようとしましたが、それは働いていないようです:
def initialize()
vote_total=0
end
は事前にお願いします。
のように、オブジェクトにハッシュ属性を渡します。あなたはRuby on Railsにに新しいしている場合
post = Post.new(:vote_total => 123, :author => "Jason Bourne", ...)
、あなたはおそらくこれと、より多くをカバーしていGetting Started Guideを、読むことをお勧めします便利なRailsのイディオムについて詳しく説明します。
私はコールバックを使用します。 Available Callbacks
class Post
before_save :set_defaults
def set_defaults
self.vote_total ||= 0
#do other stuff
end
end
あなたは
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。
ありがとう、はい私はこれを例として使用しましたが、私がそのようなVote.new(投稿)を自動的にvote_total増加する必要があるようなより洗練されたinstanciationsをしたい場合はどうしますか? – user1144442
その場合、Vote.add_post(post)のように、あなたのVoteモデルでメソッドを作るほうが意味があり、内部的に 'add_post'メソッドはvote_totalを増やすことができます。 – MrDanA