Rails 3 - данные Seed.rb для класса денег - PullRequest
2 голосов
/ 27 марта 2011

Я пробую seed.rb впервые, и одна из моих моделей данных использует инкапсуляцию, предоставляемую денежным камнем.

Соответствующие драгоценные камни:

money (3.6.1)
rails (3.0.5)

Моя модель, таким образом,far:

app/models/list.rb
class List < ActiveRecord::Base
  attr_accessible :alias, :unit, :participating_manufacturer, :quantity
                  :latest_price_cents, :latest_price_currency, :url
  belongs_to :user

composed_of :latest_price,
  :class_name => "Money",
  :mapping => [%w(latest_price_cents latest_price_cents), %w(latest_price_currency currency_as_string)],
  :constructor => Proc.new {
    |latest_price_cents, latest_price_currency| Money.new(latest_price_cents ||
    0, latest_price_currency || Money.default_currency)
  },
  :converter => Proc.new {
    |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError,
    "Can't convert #{value.class} to Money")
  }
end

1) (успешно решено)

2) Когда я приступлю к написанию проверок, лучше было бы написать их для атрибута: latest_price или для: latest_price_cents &: атрибуты latest_price_currency отдельно?

/db/seeds.rb
users = User.create([{ :name => "Foo", :email => "foo@gmail.com",
                   :password => "foobar", :password_confirmation => "foobar" }])
# etc, will add more users to the array
list = List.create(:user_id => users.first.id, :alias => "Januvia 100mg",
                   :unit => "tablet", :participating_manufacturer => "Merck",
                   :quantity => 30, :latest_price_cents => 7500,
                   :latest_price_currency => "USD", :url =>
                   "http://www.foobar.com/januvia/100mg-tablets/")

3) Возможно, это мелочи, но в начале я должен назначать значения атрибуту virtual: latest_price или непосредственно атрибутам latest_price_cents и latest_price_currency?Есть ли способ использовать faker вместо /db/seeds.rb для выполнения этой задачи?

Я новичок в рельсах и веб-разработке.

1 Ответ

0 голосов
/ 05 апреля 2011

Я нигде не вижу вашего атрибута latest_price, поэтому не знаю, как ответить на ваш вопрос.Как правило, вы должны проверить атрибуты, введенные в пользовательской форме.Поэтому, если пользователь вводит latest_price_cents и latest_price_currency в форме, то это те, которые нуждаются в проверке.

В исходном файле есть ошибка.Вы хотите передать хеш, а не массив, при создании нового пользователя;и users должен быть массивом.

users = []
users << User.create!(:name => "Foo",
                     :email => "foo@gmail.com",
                     :password => "foobar",)
                     :password_confirmation => "foobar")

Однако, если вы рассматриваете фейкер, потому что хотите создать фиктивные данные, взгляните на Машинист или Фабричная девушка .Они предназначены для создания фиктивных данных, обычно для автоматизированных тестов.

После того, как вы настроили некоторые чертежи, если вы хотите создать фиктивные данные в своем начальном файле, вы можете сделать нечто подобное в seeds.rb:

20.times { List.make } unless Rails.env.production?
...