我在models/concerns/sluggable.rb
:
module Sluggable
extend ActiveSupport::Concern
module ClassMethods
def sluggify(str, type)
# ...
end
end
end
我已将其纳入models/slug.rb:
class Slug < ActiveRecord::Base
include Sluggable
# ...
before_save :create_slug
private
def create_slug
self.slug = Slug.sluggify(self.title, 'item')
end
end
我认为模块中的sluggify
方法现在可以作为Slug
的类方法使用,但似乎并非如此。尝试将模型插入数据库时出现undefined method: sluggify
错误。
可以从Rails控制台获得Sluggable
模块。我可以确认我的代码是正确的:
module Sluggable
def sluggify(str, type)
# ...
end
end
class SluggableTest
extend Sluggable
end
slug = SluggableTest.sluggify('string to sluggify', 'item')
那么为什么我不能让它在模型中作为一个关注点工作?
答案 0 :(得分:0)
尝试在include Sluggable
类的顶部添加Slug
,如下所示:
class Slug < ActiveRecord::Base
include Sluggable
# ...
before_save :create_slug
private
def create_slug
self.slug = Slug.sluggify(self.title, 'item')
end
end
因为,你是对的。一旦sluggify
Slug
类include
模块中的Sluggable
模块将Slug
类附加Slug
方法,该方法将作为include Sluggable
类的方法提供{1}}课程。我想,因为您的Slug
类之上没有sluggify
,所以Sluggable
方法在Slug
模块包含在{{1}之前被调用}}因此它得到了undefined method
错误,这是有道理的!
答案 1 :(得分:0)
您在嵌套模块中定义方法,但不包含或扩展它。以下是正确的模板:
false