0

当动态创建一个类方法时,有没有办法在创建时加入一些已知的参数?

我为自己制作了一个模块,它在创建模型时根据给定的属性生成:slug属性。https://gist.github.com/firedev/4943289:title

但是我想重构这部分:

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
4

1 回答 1

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"
于 2013-02-13T10:25:28.270 回答