2011-02-04 2 views
2

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

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

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

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

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

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

Спасибо.

Edit: Если кто-то смущен AASMs, как я, вот это хорошее объяснение их функции в 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 
+0

Ссылка на envylabs больше не работает. Вот рабочая ссылка для этого blogpost: http://madewithenvy.com/ecosystem/articles/2009/rails-state-machine/ –

ответ

3

дал ему мысль и это то, что вышло:

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

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, как вы предложили.

+0

Это определенно помогает уделить мне больше внимания - учитывая то, что я читал. Большое спасибо за это объяснение. – marcamillion

+0

Btw, я просто прочитал, что ядро ​​Rails 3 имеет конечный автомат как часть ядра. Мне лучше использовать конечный автомат Rails 3 или использовать aasm или какой-нибудь другой камень? И почему ? – marcamillion

+0

этот вопрос может помочь: http://stackoverflow.com/questions/349711/ruby-on-rails-state-machines –