Как справиться с массовым заданием в этом случае - PullRequest
3 голосов
/ 30 мая 2011

У меня есть регистрация пользователя, где пользователь устанавливает свое имя пользователя, first_class и некоторые другие атрибуты.Теперь есть также некоторые другие атрибуты, которые я должен установить, например: str или: acc.

Эти атрибуты, вероятно, будут установлены в команде массового назначения, такой как create.Я бы не хотел делать что-то вроде update_attribute для каждого отдельно, конечно.Поэтому я должен сделать их attr_accessible.

Однако я не хочу, чтобы пользователь устанавливал их.Например, если пользователь решит иметь first_class = 'Ranger', я бы установил его: str, а не его.

Моя идея состоит в том, что я просто сохранил бы params [: first_class] или params [:имя пользователя] и просто явно установить все остальное в моем методе создания для пользователя.Вы так бы это сделали?

Ответы [ 2 ]

6 голосов
/ 30 мая 2011

Я предполагаю, что другие атрибуты предопределены на основе того, что пользователь выбирает в процессе регистрации?

В этом случае я бы добавил хук before_create к вашей моделикоторый вычисляет и присваивает эти атрибуты соответственно:

class PlayerCharacter < ActiveRecord::Base
  before_create :assign_attributes

  # ...

  # This is called after you call "update_attributes" but before 
  # the record is persisted in the database
  def assign_attributes

    # Stats are determined by the 'first_class' attribute
    stats = case first_class
      when "Ranger"  then { :str => 20, :dex => 19, :wis => 8 }
      when "Wizard"  then { :str => 10, :dex => 14, :wis => 18 }
    end

    self.attributes.merge!(stats)
  end
end
2 голосов
/ 30 мая 2011

Основываясь на методе Дэна, вы также можете просто добавить новую модель "PlayerClass" для вашего персонажа IMHO.Он может иметь отношение, которое имеет отношение к вашему игроку или классу персонажа, так что вы можете иметь много таких.Таким образом, если вам нужно больше классов, вы можете добавить его через административный элемент управления в вашем пользовательском интерфейсе и добавить его непосредственно в БД.

Просто еще один вариант:)

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