Ruby on rails rails成就

Ruby on rails rails成就,ruby-on-rails,achievements,Ruby On Rails,Achievements,然后是在我们的web应用程序中实现某种成就的时候了。我有一个想法或多或少像这个问题中描述的等级制度 我们正在开发的应用程序是一种软件即服务,旨在在没有软件开发人员的情况下进行外部管理。问题是,软件管理员应该可以通过web界面在运行时创建新类型的成就。这样,教区就成了一堵墙 我在某个地方读到过,可以通过有限状态机实现这种情况,但目前我没有足够的关于这个主题的信息 编辑:具体问题 我想用一系列需要满足的条件来模拟一个成就类。这个基本类将有一个布尔值,它递归地检查所有条件是否有效。然后,条件可以是硬编

然后是在我们的web应用程序中实现某种成就的时候了。我有一个想法或多或少像这个问题中描述的等级制度

我们正在开发的应用程序是一种软件即服务,旨在在没有软件开发人员的情况下进行外部管理。问题是,软件管理员应该可以通过web界面在运行时创建新类型的成就。这样,教区就成了一堵墙

我在某个地方读到过,可以通过有限状态机实现这种情况,但目前我没有足够的关于这个主题的信息

编辑:具体问题

我想用一系列需要满足的条件来模拟一个成就类。这个基本类将有一个布尔值,它递归地检查所有条件是否有效。然后,条件可以是硬编码类。然后,系统管理员结合原子条件创造新的成就

我担心的是,原子条件下的课程越来越多。我不想有30+条件类的项目。任何建议都非常感谢

编辑:有关实施的更多详细信息

从SpyrosP响应来看,构建所描述的DSL似乎是一个好主意。在某种程度上,成果必须保存在数据库中。保持同样的例子:

comments :less_than => 10
check_comments
comments :more_or_equal => 100
award_hundred_comments_badge 
为了以友好的方式创造成就,应该有一个表来存储要检查的条件:

Achievement
| id | name                |
| 1  | "Houndred Comments" |

Condition
| achievement_id | expression             |  
| 1              | some sort of condition |

我对同一个想法很感兴趣,不久前读了不同的东西。也许做这件事最好的方法就是使用观察者。观察者就像一个标准过滤器(在_filter等之前),但有一些区别,比如如何处理返回值等等

这就是说,如果您的系统非常复杂,您可能需要使用状态机插件,如。然而,我觉得这对于一个功能来说太多了

如果我必须面对复杂的成就场景,我可能会创建一个定义成就行为的简单DSL。比如:

for_achievement :hundred_comments do
  before_achievement :status => Comment, :lower_than => 100
  after_achievement :status => Comment, :more_or_equals => 100
end
comments :less_than => 10
check_comments
comments :more_or_equal => 100
award_hundred_comments_badge
你明白了。这将是一种全面描述成就的方式。然后,您的观察者将能够使用您的Achasition.rb类场景,以确定是否达到了某项成就。想想坎坎的工作方式。对于管理员来说,这也是一种很好的方法,可以通过比我在上面的示例中介绍的更简单的DSL编写简单的成就需求

希望这能对你有所帮助,或者至少能给你一些想法:)

编辑:更简单的DSL

DSL可以非常简单且富有表现力,因此人们甚至可能喜欢用它来编写场景。比如:

for_achievement :hundred_comments do
  before_achievement :status => Comment, :lower_than => 100
  after_achievement :status => Comment, :more_or_equals => 100
end
comments :less_than => 10
check_comments
comments :more_or_equal => 100
award_hundred_comments_badge
这很容易形成一个获得100条评论的有效场景。让我们设想一个场景,如果用户只邀请了10位女性,他就会得到一个徽章

invites :less_than => 10, gender :female
check_invites
invites :equals => 10, gender :female
award_women_invitations_badge
现在,如果你向他们解释有关DSL的基本知识,我认为即使对于那些对ruby一无所知的管理员来说,写这篇文章也非常简单。但如果您不想让他们参与其中,可以创建如下表单:

Action Dropdown => [Comment, Invite, Post, ....]
Condition => [Equal, Less Than, More Than, ....]
Condition_Value => (TextBox to write value to)
CheckCondition => [Check Invitation Count, Check Messages Count, ....]

StackOverflow用于回答明确的特定编程问题。这个很主观。谢谢你的回答。我真的很喜欢你的想法,我认为这是一种表达标准成就的奇妙方式。我不认为通过web界面创建DSL是可行的,但是,你认为呢?这主要取决于你为它创建DSL的方式。因为管理员对ruby一无所知,所以您可以使DSL非常接近纯英语,或者更好,通过一个简单的表单为他们生成代码。想象一下,就像有一个英文的需求下拉列表,当你的管理员选择需求时,你只需要把它堆积起来,创建DSL场景。我编辑了我的问题,以呈现一个更简单的DSL,您的管理员甚至可能会觉得写这个问题很有趣:)我无法访问互联网,很抱歉错过了回复。我认为DSL是帮助开发人员表达这些成果的一种很好的方式。我仍然想知道这个想法的实施情况。这些新的成果,例如从web界面创建的成果,将被存储到数据库中。在你看来,实现这一目标的最佳方式是什么?我的意思是,在某种程度上,需要保存数据库列。我正在再次编辑我的问题,以便更清楚地了解“条件”列的实现,我仍然有一个模糊的想法。它应该对其他模型有某种反映。你对此有什么想法吗?我要做的是直接将条件列与程序的特定属性关联起来。例如,条件“Check Invitation Count”直接指rails中的Invitation.Count。