我觉得我在某处读到了关于在模型上动态生成许多类似实例方法的 ActiveRecord 宏,但现在(尽管浏览了在线文档和 RoR 书籍)我找不到它。
我已经使用普通的旧 Ruby 解决了这个问题,但是如果有更好的(更多 Rails-y)方法来解决这个问题,我想知道它。
所以,我有Character
,Gear
和Modifiers
模型(是的,这是一个用于 RPG 的应用程序)。角色将拥有可以为他的统计数据添加修饰符的装备。所以我想要一个方法来查询他的装备(和他的装备的修饰符)并为相关统计数据的修饰符求和。(参见下面代码中的方法)。
所以我的角色模型看起来像这样:
class Character < ActiveRecord::Base
has_many :gears
has_many :modifiers, :as => :modifiable, :through => :gears
stats = ["hp", "bab", "ac"] # etc...
stats.each do |method_name|
define_method method_name do
self.modifiers.where(:kind => method_name).sum(:amount)
end
end
end
所以,这样我可以做到
> jim = Character.create(:name => "Jim")
然后给吉姆一些修改他的“hp”、“bab”或“ac”的装备,然后我就可以这样做了:
> jim.hp
或者
> jim.ac
ETC...