如何在Rails 3中实现aasm以实现我的目的?

时间:2011-02-04 21:02:00

标签: ruby-on-rails-3 aasm

我是Rails n00b并且已被告知,为了让我能够跟踪用户帐户的状态(即付费,未支付(因此禁用),免费试用等),我应该使用'AASM '宝石。

所以我找到了一个似乎最受欢迎的版本:https://github.com/rubyist/aasm但是说明非常模糊。

我有一个用户模型和一个计划模型。用户的模型管理您可能期望的一切(用户名,密码,名字等)。计划模型管理应分配给用户的订阅计划(具有限制)。

所以我想弄清楚如何使用AASM gem做我想做的事情,但不知道从哪里开始。

我是否要创建新模型?然后我在用户模型和AASM模型之间建立关系?我如何建立关系?用户'has_many'表示?这似乎对我没有多大意义。

任何指导都会非常感激。

感谢。

编辑:如果其他人对像我这样的AASM感到困惑,那么Envy Labs的优秀人员可以很好地解释他们在Rails中的功能: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 个答案:

答案 0 :(得分: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模型中使用。