내 모델의 한 특성에 메서드 체인을 동적으로 만들려고합니다.alias_attribute 원래 특성 이름을 사용하여 메서드를 만들고 루프하면 루프가 발생합니다.
def create_filtered_attribute(attribute_name)
alias_attribute "#{attribute_name}_without_filter", attribute_name
define_method "#{attribute_name}" do
filter_words(self.send("#{attribute_name}_without_filter"))
end
end
그래서 난, 속성 이름과 함께 '_without_filter'에 대한 별칭을 문자열을받는 클래스가 생성 될 때 속성이 밤은 때문에 (alias_method 또는 alias_method_chain이 여기에 실패 지금까지 나는이 기능이), 그리고 나는 그 내용을 필터링하는 속성 이름으로 새로운 메소드를 만든다.
그러나 어떻게 든 을 "# {attribute_name} _without_filter"으로 호출하면 내 새 메서드를 호출합니다. (왜냐하면 alias_attribute가 어떤 방법으로 생각하기 때문에) 프로그램이 스택 루프로 들어갑니다.
임은 그 속성의 이름을 변경하려고, 그래서 방법에 대해 이름을 사용할 수 있습니다 ...
은 누군가가 나이에 계몽하십시오 할 수 있습니다.
있다 : 당신은 항상 당신의 속성에 액세스 할 수 있도록 당신이 그것을 무시하더라도 액티브에
model.attribute
및model.attribute=
방법은 간단, read_attribute 및 write_attribute를 호출하는 것이참고 게터 또는 세터의 사용 사례 : http://www.chrisrolle.com/blog/aliasing-the-rails-way –