2013-02-13 1 views
0

클래스 메서드를 동적으로 만들 때 생성시 알려진 몇몇 인수를 구워낼 수있는 방법이 있습니까?구운 paramers를 사용하여 Ruby 메서드를 동적으로 만드는 방법은 무엇입니까?

모델을 만들 때 주어진 :title에서 :slug 속성을 생성하는 모듈을 직접 만들었습니다. https://gist.github.com/firedev/4943289

나는이 부분 리팩토링 할 것이다 그러나 : 그래서 내가 여기에 모든 PARAMS 제거 할 수

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

이 코드를 살펴보십시오. 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" 
+0

죄송합니다, 아니, 내가 저장 '필요할 때 데이터베이스에 slug', 나는 to_param''에 그것을 사용할 수 있습니다. 문제는 속성을 메소드에 굽는 방법이 있는지입니다. 나는 약간의 배경을 제공하는 코드를 포함시켰다. – firedev

+0

코드 링크 만 제공하지 마십시오. * 링크가 귀하의 답변을 깨뜨릴 때 * 거의 가치가 없을 것입니다. 대신, 왜 올바른지 링크 코드의 요약을 제공 한 다음 전체 예제에 링크하십시오. –

관련 문제