Rob*_*yle 5 ruby inheritance ruby-on-rails
我编写了一个基本的Eventable模块,允许其他类为自己创建事件.所有模型都有自己的一组事件,例如Message存在sent或User有sign_in事件.我想在类级别创建一个事件数组作为常量,并访问模块内部的数组,以构建辅助方法来创建如下事件:
class User
EVENT_TYPES = ['sign_in', 'sign_out']
include Eventable
end
Run Code Online (Sandbox Code Playgroud)
class Message
EVENT_TYPES = ['sent', 'opened']
include Eventable
end
Run Code Online (Sandbox Code Playgroud)
module Eventable
extend ActiveSupport::Concern
included do
has_many :events, as: :eventable
attr_accessor :metadata
self::EVENT_TYPES.each do |event_type|
define_method "create_#{event_type}_event" do |args={}|
Event.create(eventable: self, event_type: event_type)
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
这个问题是:方法没有正确定义.它无法EVENT_TYPES正确引用相应模型的常量.
如何从模块中获取类常量?
我想说,像这样使用常量并不是很红宝石风格。这更惯用(至少在 Rails 中)。
class Message
include Eventable
event_types :sent, :opened
end
Run Code Online (Sandbox Code Playgroud)
这是实现
module Eventable
extend ActiveSupport::Concern
module ClassMethods
def event_types(*names)
names.each do |event_type|
define_method "create_#{event_type}_event" do |args={}|
Event.create(eventable: self, event_type: event_type)
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |