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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top