【发布时间】:2016-09-29 19:16:49
【问题描述】:
我正在使用 Hanami,并在 /lib/supports/utils.rb 中创建了一个自定义模块。我要求所有位于 /lib/myapp 中的 /lib/supports 文件如下所示:
require 'hanami/model'
require 'hanami/mailer'
Dir["#{__dir__}/myapp/**/*.rb"].each { |file| require_relative file }
Dir["#{__dir__}/supports/**/*.rb"].each { |file| require_relative file }
Hanami::Model.configure do
# and so on
在 /lib/supports/utils.rb 中,我有:
# using the gem 'slugify'
require 'slugify'
module MyModule
module Utils
module Slug
def slug_it(random = false)
if random
slugify + '-' + SecureRandom.hex(10).to_s
else
slugify
end
end
end
end
end
我尝试在存储库中包含 MyModule::Utils::Slug,但它总是返回 NoMethodError: undefined method `slug_it' for "string":String。一个例子:
class EventRepository
include Hanami::Repository
include MyModule::Utils::Slug
def self.create_or_update(attrs)
found = find(attrs.id)
attrs = event_attributes(attrs)
if found
unless found.slug.include? attrs[:name].slug_it
attrs[:slug] = attrs[:name].slug_it(true)
end
found.update(attrs)
update found
else
attrs[:slug] = attrs[:name].slug_it(true)
create Event.new(attrs)
end
end
end
只有在 /lib/supports/utils.rb 的底部添加才有效:
class String
include MyModule::Utils::Slug
end
我希望始终在 EventRepository 中包含像 include Hanami::Repository 这样的模块。
我做错了什么?
【问题讨论】: