当动态创建一个类方法时,有没有办法在创建时烘焙一些已知的参数?
我为自己创建了一个模块,当我创建模型时,它会从给定的:slug
生成:title
属性。 https://gist.github.com/firedev/4943289
但是我想重构这一部分:
def create_slug(title_attr, slug_attr, &block) # generated method
self.send(slug_attr) # I have to pass slug_attr from outside
...
end
所以我可以摆脱所有的参数:
self.send :after_initialize do
create_slug(title_attr, slug_attr, &block) # I pass attributes from here
end
并在创建的方法中添加参数:
def create_slug # this method is generated automatically
self.send(:slug) # I want :slug to be baked in
...
end
self.send :after_initialize, :create_slug # no attributes
答案 0 :(得分:0)
看一下这段代码:https://github.com/oleander/to_param-rb/blob/master/lib/to_param/base.rb
我认为它符合您的要求。
<强>用法:强>
class User < ActiveRecord::Base
to_param :name
end
User.create(name: "Linus").to_param # => "1-linus"