gpt4 book ai didi

ruby-on-rails - 如何从模块中引用的类常量数组元编程方法?

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:00 25 4
gpt4 key购买 nike

我编写了一个基本的 Eventable 模块,允许其他类为自己创建事件。所有模型都有自己的一组事件,例如正在发送Message或具有sign_in事件的User .我想在类级别创建一个事件数组作为常量,并在模块内访问该数组以构建用于创建事件的辅助方法,如下所示:

class User
EVENT_TYPES = ['sign_in', 'sign_out']
include Eventable
end

class Message
EVENT_TYPES = ['sent', 'opened']
include Eventable
end

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

问题是:方法没有正确定义。它无法正确引用相应模型的常量 EVENT_TYPES

如何从模块中访问类常量?

最佳答案

我会说,像那样使用常量不是很像 ruby​​esque。这更加地道(至少在 Rails 中)。

class Message
include Eventable

event_types :sent, :opened
end

下面是实现

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

关于ruby-on-rails - 如何从模块中引用的类常量数组元编程方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com