【问题标题】:How do I implement aasm in Rails 3 for what I want it to do?如何在 Rails 3 中实现 aasm 以实现我想要的功能?
【发布时间】:2011-02-04 21:01:59
【问题描述】:

我是 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

【问题讨论】:

标签: ruby-on-rails-3 aasm


【解决方案1】:

考虑到结果是这样的:

你没有在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 模型。

【讨论】:

  • 鉴于我一直在阅读的内容,这绝对有助于让我更深入地了解事情。非常感谢您的解释。
  • 顺便说一句,我刚刚读到 Rails 3 核心有一个状态机作为核心的一部分。我最好使用 Rails 3 核心状态机还是使用 aasm 或其他一些 gem?为什么?
  • 我之前确实偶然发现了这个问题,但看起来这个问题是在 08 年提出的——即在 Rails 3 出现之前。
  • 所以我完全理解,考虑到我的情况,我会有多少次转换?只有三个?用户帐户只能从:free_trial 转到:paid:disabled。或者从:disabled:paid,或者从:paid:disabled,如果他们错过了付款。我是否遗漏了什么或者这听起来准确吗?
猜你喜欢
  • 2011-12-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
相关资源
最近更新 更多