Как создать экземпляр объекта модели с атрибутами? - PullRequest
2 голосов
/ 13 января 2012

Я хотел бы создать экземпляр объекта модели с указанием некоторых атрибутов. Например

post = Post.new 

должен установить post.vote_total в 0. Я попытался сделать это в методе initialize, но, похоже, он не работает:

def initialize()
    vote_total=0
end

Заранее спасибо.

Ответы [ 3 ]

9 голосов
/ 13 января 2012

Передать хэш атрибутов объекту, как в:

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

Если вы новичок в Ruby on Rails, вам, вероятно, захочется прочитать Руководство по началу работы , в котором подробно рассматриваются этот и многие другие полезные идиомы Rails.

2 голосов
/ 13 января 2012

Я бы использовал обратные вызовы: Доступные обратные вызовы

class Post
   before_save :set_defaults

   def set_defaults
      self.vote_total ||= 0
      #do other stuff
   end
end
0 голосов
/ 13 января 2012

Вы можете разрешить базе данных хранить значения по умолчанию для вас

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

Существует много споров о хранении значений по умолчаниюв базе данных хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...