相关疑难解决方法(0)

如何在RoR中实现成就系统

我很难尝试在我的Ruby on Rails应用程序中实现一个成就系统.

我有很多我想要检查的成就.所有都是由各种控制器中的一些创建动作触发的.

我有一个想法,我将有一个成就模型,其中包括控制器和它响应的动作.然后为创建过滤器,检查适用的成就.在实际定义/执行成就时,我会陷入困境.每项成就可能需要不同的数据.例如,人们想要知道用户已经回答了多少问题,另一个问题是他们做出了多少评论,以及第三个用户邀请了多少人回答了问题.

实际上只需将所有必要的ruby代码直接嵌入到DB中,这是最好的做法吗?我可以看到做一个自包含块来执行所有活动记录查找等,并返回true/false,尽管我们仍然存在一些关于事先知道什么是设置的问题(即current_user等).

任何合理的最佳做法都不会让我感到肮脏?我可以看到一个完整的策略/规则引擎是一条路径,虽然这可能会吓到我而不是计划一个.

谢谢!奥伦

ruby-on-rails

40
推荐指数
3
解决办法
6995
查看次数

用于构建成就系统的Ruby/Rails的现代工具

我有兴趣为我的Ruby on Rails应用程序构建一个强大的成就系统.

成就可以以无数种方式发生.通常情况下,我们会有一些标准可能发生在几个模型上,一些是必需的,一些是可选的(混合和匹配)触发成就.

我会说这类似于这里的成就系统或Foursquare徽章.理想情况下,如果有一个现代工具可以帮助抽象出一些DSL中的大量工作,那将是非常棒的.

我很想知道其他人如何使用Ruby或Ruby on Rails解决这个问题.从头开始构建这听起来不合理,因为我确信它已经反复多次解决.

ruby ruby-on-rails achievements

21
推荐指数
1
解决办法
4384
查看次数

RoR成就系统 - 多态关联和设计问题

我正试图在Ruby on Rails中设计一个成就系统,并且遇到了我的设计/代码.

试图使用多态关联:

class Achievement < ActiveRecord::Base
  belongs_to :achievable, :polymorphic => true
end

class WeightAchievement < ActiveRecord::Base
  has_one :achievement, :as => :achievable
end
Run Code Online (Sandbox Code Playgroud)

迁移:

class CreateAchievements < ActiveRecord::Migration
... #code
    create_table :achievements do |t|
      t.string :name
      t.text :description
      t.references :achievable, :polymorphic => true

      t.timestamps
    end

     create_table :weight_achievements do |t|
      t.integer :weight_required
      t.references :exercises, :null => false

      t.timestamps
    end
 ... #code
end
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试下面的抛弃单元测试时,它会失败,因为它表示该成就为空.

test "parent achievement exists" do
   weightAchievement = WeightAchievement.find(1)
   achievement = weightAchievement.achievement 

    assert_not_nil achievement
    assert_equal 500, weightAchievement.weight_required
    assert_equal …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails achievements polymorphic-associations

6
推荐指数
1
解决办法
1399
查看次数