Ruby on rails 如何用属性实例化模型对象?

Ruby on rails 如何用属性实例化模型对象?,ruby-on-rails,ruby,object,model,initialization,Ruby On Rails,Ruby,Object,Model,Initialization,我想实例化一个指定一些属性的模型对象。比如说 post = Post.new 应将post.vote_total设置为0。我尝试在initialize方法中执行此操作,但似乎不起作用: def initialize() vote_total=0 end 提前感谢。将属性哈希传递给对象,如下所示: post = Post.new(:vote_total => 123, :author => "Jason Bourne", ...) 如果您是Ruby on Rails新手

我想实例化一个指定一些属性的模型对象。比如说

post = Post.new 
应将post.vote_total设置为0。我尝试在initialize方法中执行此操作,但似乎不起作用:

def initialize()
    vote_total=0
end

提前感谢。

将属性哈希传递给对象,如下所示:

post = Post.new(:vote_total => 123, :author => "Jason Bourne", ...)
如果您是Ruby on Rails新手,您可能会想阅读,其中详细介绍了这一点以及许多更有用的Rails习惯用法。

我会使用回调:


您可以允许数据库为您存储默认值

class AddColumnWithDefaultValue < ActiveRecord::Migration
  def change
    add_column :posts, :vote_total, :integer, :default => 0
  end
end
class AddColumnWithDefaultValue0
结束
结束
或对于现有表:

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
class ChangeColumnWithDefaultValue

关于这一点有很多争论。

好的,谢谢,是的,我用了这个例子,但是如果我想做更复杂的实例,比如当我想要投票的时候,该怎么办。new(post)应该自动增加post的投票总数?在这种情况下,在你的投票模型上创建一个方法可能更有意义,比如Vote。add\u post(post)在内部,
add\u post
方法可以增加投票总数。
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