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 に答える