Come posso implementare ASM in Rails 3 per quello che voglio che lo faccia?
-
29-10-2019 - |
Domanda
Sono un Rails n00b e sono stato avvisato che per poter tenere traccia dello stato degli account dei miei utenti (cioè pagato, non pagato (e quindi disabilitato), prova gratuita, ecc.) dovrei usare un 'AASM 'gemma.
Quindi ne ho trovato uno che sembra essere il più popolare: https://github.com/rubyist/aasm Ma le istruzioni sono piuttosto vaghe.
Ho un modello Users e un modello Plan. Il modello dell'utente gestisce tutto ciò che potresti aspettarti (nome utente, password, nome, ecc.). Il modello di piano gestisce il piano di abbonamento a cui devono essere assegnati gli utenti (con le limitazioni).
Quindi sto cercando di capire come utilizzare la gemma AASM per fare quello che voglio, ma non ho idea da dove cominciare.
Creo un nuovo modello? Quindi imposto una relazione tra il mio modello utente e il modello per AASM? Come imposto una relazione? Come in, un utente "has_many" afferma? Non sembra avere molto senso per me.
Qualsiasi guida sarebbe davvero apprezzata.
Grazie.
Modifica: se qualcun altro è confuso dagli AASM come me, ecco una bella spiegazione della loro funzione in Rails dai bravi ragazzi di Envy Labs: http://blog.envylabs.com/2009/08/the-rails-state-machine/
Modifica2: come appare questo:
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
Soluzione
Dato il pensiero e questo è ciò che è uscito:
Hai ragione a non fare gli stati nel Plan
, non dunno quello che stavo pensando.E fallo nel modello User
o creare un modello Account
, che belongs_to :user
.Quindi, nel tuo account, provali (è tutto sulle logiche, quindi se vuoi più stati, basta fare):
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
.
Quindi quando crei un nuovo utente, crea anche un account per questo.Non preoccuparti dello stato iniziale alla creazione dell'account, verrà automaticamente impostato su "GRATIS" quando viene creato un account.Oppure, se suona più facile, nel modello User
, come hai suggerito.