2013-07-19 4 views
0

내 Item 모델에서 메서드의 값을 출력하려고합니다 (current_user는 application_controller에 정의되어 있습니다).rabl에서 메소드 값을 출력하는 방법은 무엇입니까?

object @item 
attributes :id, :name 

code :is_liked do |this_item| 
    if current_user 
    this_item.is_liked current_user 
    else 
    false 
    end 
end 

내 모델 : 나는 현재 내 rabl 템플릿으로이

class Item < ActiveRecord::Base 
    ... 
    def is_liked user 
    if user 
     if user.liked_item_ids.include?(self.id) 
     return true 
     else 
     return false 
     end 
    end 
    end 
    .... 
end 

그러나 그것은 작동하지 않습니다. 나는 이것을 출력하는 적절한 방법이 무엇인지 확신하지 못한다. 이 아이디어가 올바르게 작동하는 방법을 알고 싶습니까?

Failure/Error: Unable to find matching line from backtrace 
ActionView::Template::Error: 
    stack level too deep 

답변

0

보십시오 : 당신은 이미 방법을

node(:is_liked) {|this_item| this_item.is_liked(current_user) } 

, 당신은 단순히 내에서 여기에 호출 할 수 있습니다 여기에 편집 한

내가지고있어 오류 발생 노드를 생성 할 수 있습니다.

+0

들으, 나는 시도하지만 점점 오전 오류로 질문을 업데이트했습니다. current_user가 내 rabl 템플릿에서 액세스 할 수 있는지 확실하지 않아 현재 테스트 중입니다. – timpone

+0

current_user를 사용할 수 있어야합니다. 그냥'attributes'리스트에서'is_liked'를 제거하고'is_liked' 메쏘드를 확인하십시오. – apneadiving

+0

thx; 네, 속성에서 is_liked와 함께 시도해 봤지만 여러분의 의견에 동의합니다. 질문을 업데이트 할 것입니다. 나는 current_user를 application_controller와 helper_method로 가지고 있기보다는 helper 클래스로 옮겨 보려고합니다. thx – timpone

1

귀하의 의견은 귀하가 귀하의 견해 (보기에 비해 비교할 수 있습니다)에 논리를 추가 할 때 괜찮을 것 같습니다, 그러나 당신은 리터러 제시 자의 논리를 고려할 수 있습니다. 단지 @apneadiving하는 말했듯이, 당신의 오류에 대해서는 rabl here

와 발표자에 대한

더 자세한 정보는, 어딘가에 당신의 코드베이스에 재귀 문제가 있습니다. 그냥 호기심에 의해 code 블록의 이름을 메소드 이름이 아닌 다른 이름으로 바꾸려고하십니까? 사용중인 rabl 버전에 따라 문제가 될 수 있습니다.

마침내, 당신은 당신의 is_liked 방법을 리팩토링 고려해야합니다

def is_liked user 
    return user.liked_item_ids.include?(id) if user 
    false 
end 
+0

thx가 발표자의 헤드 업을 위해, 나는이 모델을 Active Model Serializers로 옮겼고, 그것이 괜찮은 것 같아서 우울한 이슈라고 생각하게했다. – timpone

+0

당신이 환영한다고 생각한다면 대답을 받아들이십시오. –

관련 문제