По сути, я хочу создать предмет, в данном случае кольцо. У меня есть разные ВИДЫ колец:

class Ring < ActiveRecord::Base

  DISPLAY_NAMES [ 'Silver', 'Gold', 'Diamond' ]

  attr_accessible :description, :display_name, :roll, :bonus, :total, :image, :gold

end

Есть ли способ рандомизировать DISPLAY_NAMES колец?

Я предполагаю что-то вроде @ring.display_name = rand(Ring::DISPLAY_NAMES)?

Есть лучший способ сделать это?

Как только это будет найдено, есть ли способ установить все остальные атрибуты кольца, такие как @ring.roll и @ring.bonus и т. Д.

Например, если кольцо выглядит как серебро, могу ли я объявить в модели какой-то оператор if, в котором указано, является ли кольцо серебряным, а другие атрибуты - бла-бла-бла?

Заранее спасибо. Учимся медленно, но верно.

0
user1467317 28 Июн 2012 в 22:41

1 ответ

Лучший ответ

Чтобы получить случайную запись из массива DISPLAY_NAMES, выполните

@ring.display_name = DISPLAY_NAMES.sample

Проверьте http: //www.ruby-doc. org / core-1.9.3 / Array.html # method-i-sample

Для второй части, если остальные значения статичны и не изменятся, я бы просто засеял их в seed.rb

Заполните базу данных всеми значениями для каждого [ 'Silver', 'Gold', 'Diamond' ] Итак, у вас будет 3 записи в базе данных для каждого имени.

После этого вы можете сделать

@ring = Ring.find_by_display_name(DISPLAY_NAMES.sample)
0
Sully 28 Июн 2012 в 23:02
Отлично, спасибо! Это дает мне несколько новых идей о том, как точно к этому подойти.
 – 
user1467317
28 Июн 2012 в 23:57
Я заметил одну особенность этого метода. Мне нужно, чтобы каждое созданное кольцо имело новый идентификатор #. Если я сделаю это таким образом, он будет иметь тот же идентификатор, что и засеянный.
 – 
user1467317
29 Июн 2012 в 00:00