0

레일 개발을 처음 사용합니다. 메서드에 대한 별칭을 만들었으며 별칭이 호출되는지 알고 싶습니다.레일스 모델에서 호출되는 별칭 메소드 찾기

이 코드가 있습니다.

alias_method :net_stock_quantity_equals :net_stock_quantity 
alias_method :net_stock_quantity_gte :net_stock_quantity 
alias_method :net_stock_quantity_lte :net_stock_quantity 
alias_method :net_stock_quantity_gt :net_stock_quantity 
alias_method :net_stock_quantity_lt :net_stock_quantity 

def net_stock_quantity 
    #some code here 
end 

사용자가 별칭을 호출했음을 알고 싶습니다. 사용자가 net_stock_quantity_equals을 호출하는 경우처럼 사용자가 net_stock_quantity_equals이 아니고 net_stock_quantity이 아닌지 확인해야합니다.

도움을 주시면 감사하겠습니다.

+2

메소드를 별명 지정하는 것입니다. 실제로 * 실제 * 메소드를 생성하고 어떤 메소드가 호출되는지에 따라 무언가를하고 싶은 것처럼 들립니다. 모든 alias_method는 별칭의 메서드입니다. 당신은 다른 것을하려고 노력하고 있습니다. –

+0

레코드를 동적으로 필터링하려는 경우 "Ransack"보석이 유용 할 수 있습니다. https://github.com/ernie/ransack –

+0

예 모델의 메소드를 최소화하려고합니다. 나는 별칭이 호출 된 기지에'net_stock_quantity' 조건이 사용되기를 원합니다. 더 나은 접근 방법입니까? 그렇다면 어떻게하면 좋을지 말해 주시고 그렇지 않다면 나에게 대안과 더 나은 접근법을 알려주십시오. 감사. –

답변

0
def net_stock_quantity(alias_used = :net_stock_quantity) 
    method_called = caller[0] 
    #some code 
end 

method_called 비슷한 일을하고 여기에 튜토리얼이있다.

1

그것은 당신 잘못이 문제를 접근하고 생각 - 대신 별명 방법을 사용하는 방법의 예에 매개 변수로 :equals, :gte, :lte 등을 통해 보내

def net_stock_quantity(type = :all) 
    # do something with the type here 
end 
+0

Sachnir, meta_search 문서를 살펴보면 매개 변수 (: equals, : gte, : lte)를 사용자 지정 검색 방법으로 보낼 수 없다는 것을 분명히 알 수 있습니다. –

1

당신은 그것을 할 method_missing 오버라이드 (override) 할 수있다.

def method_missing(method_name, *args, &block) 
    if method_name.to_s =~ /^net_stock_quantity_/ 
    net_stock_quantity method_name 
    else 
    super 
    end 
end 

def net_stock_quantity(alias_used = :net_stock_quantity) 
    #some code 
end 

라는 별명의 이름이 포함됩니다 http://net.tutsplus.com/tutorials/ruby/ruby-for-newbies-missing-methods/

+0

아주 좋은 답변과 나는 그것이 너무 효과가 있다고 확신합니다. 그러나 간단한 해결책도 있습니다. 코드를 주석에 올바르게 표시 할 수 없으므로이 질문에 대한 새로운 대답으로이 솔루션을 작성하겠습니다. –

관련 문제