Как мне реализовать aasm в Rails 3 для того, что я хочу сделать? - PullRequest
2 голосов
/ 05 февраля 2011

Я - Rails n00b, и мне сообщили, что для того, чтобы я мог отслеживать состояние учетных записей моего пользователя (то есть платных, неоплаченных (и, следовательно, отключенных), бесплатной пробной версии и т. Д.), Я должен использовать AASM 'драгоценный камень.

Итак, я нашел тот, который кажется наиболее популярным: https://github.com/rubyist/aasm Но инструкции довольно расплывчаты.

У меня есть модель Users и модель Plan. Модель пользователя управляет всем, что вы можете ожидать (имя пользователя, пароль, имя и т. Д.). Модель плана управляет планом подписки, которому должны быть назначены пользователи (с ограничениями).

Поэтому я пытаюсь понять, как использовать гем AASM, чтобы делать то, что я хочу, но не знаю, с чего начать.

Создать новую модель? Затем я устанавливаю связь между моей моделью пользователя и моделью для AASM? Как мне установить отношения? Как, например, пользователь has_many заявляет? Мне кажется, это не имеет особого смысла.

Любое руководство будет очень цениться.

Спасибо.

Редактировать: Если кто-то еще смущен такими AASM, как я, вот хорошее объяснение их функции в Rails замечательными людьми из Envy Labs: http://blog.envylabs.com/2009/08/the-rails-state-machine/

Edit2: Как это выглядит:

include AASM


  aasm_column :current_state

  aasm_state :paid
  aasm_state :free_trial
  aasm_state :disabled #this is for accounts that have exceed free trial and have not paid
  #aasm_state :free_acct

  aasm_event :pay do
    transitions :to => :paid, :from => [:free_trial, :disabled]
    transitions :to => :disabled, :from => [:free_trial, :paid]
  end

1 Ответ

3 голосов
/ 05 февраля 2011

, если подумать, и вот что получилось:

Вы правы, что не сделали состояния в Plan, не знаю, о чем я думал.Либо сделайте это в модели User, либо сделайте модель Account, которая belongs_to :user.Затем в своей учетной записи попробуйте следующее (все дело в логике, поэтому, если вы хотите больше состояний, просто создайте):

aasm_initial_state :free

aasm_state :free
aasm_state :paid
aasm_state :disabled

aasm_event :pay do
  transitions :to => :paid, :from => [:free, :disabled]
end

aasm_event :disable do
  transitions :to => :disabled, :from => [:free,:paid]
end

Поэтому, когда вы создаете нового пользователя, создайте для него учетную запись,Не беспокойтесь о начальном состоянии при создании учетной записи, оно будет автоматически установлено как «свободное» при создании учетной записи.Или, если это звучит проще, в модели User, как вы предложили.

...