我在很多模特中使用FriendlyId。我注意到我的代码中有一些冗余,只要创建更新URL的功能,所以我决定把它放在一个模块中:
module TestModule
def should_generate_new_friendly_id?
name_changed?
end
end
现在的问题是,如果我从我的类和模块中创建slug所需的基本代码行
extend FriendlyId; friendly_id :name, use: :slugged
我收到此错误:
undefined method `relation' for class `Module'
有没有办法让这个工作没有我必须为我的每个模型的扩展声明权利?
答案 0 :(得分:2)
您可以让您的模块扩展您对其中包含的类的友好。
module TestModule
def self.included(klass)
klass.extend FriendlyId
klass.class_eval do
friendly_id :name, use: :slugged
end
include InstanceMethods
end
module InstanceMethods
def should_generate_new_friendly_id?
name_changed?
end
end
end
然后在你的模型中,你只需要包含这个
class MyModel < ActiveRecord::Base
include TestModule
# the rest of the class
end
你也可以在没有额外模块的情况下完成
module TestModule
def self.included(klass)
klass.extend FriendlyId
klass.class_eval do
friendly_id :name, use: :slugged
def should_generate_new_friendly_id?
name_changed?
end
end
end
end