在模块中使用 FriendlyId
Using FriendlyId inside a module
我在我的许多模型中使用 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'
有没有什么方法可以让它工作而不必为我的每个模型正确扩展声明?
您可以让您的模块为包含它的 类 扩展友好度。
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
我在我的许多模型中使用 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'
有没有什么方法可以让它工作而不必为我的每个模型正确扩展声明?
您可以让您的模块为包含它的 类 扩展友好度。
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