2011-10-03 2 views
1

의 내가 간단한 모델을 가지고 있다고 가정 해 봅시다 :내 모델에 넣은 방법을 외부에서 액세스 할 수 있는지 어떻게 확인할 수 있습니까?

class Subscription < ActiveRecord::Base 
    attr_accessor :subscribed 

    def subscribed 
    @subscribed = Subscription.where(task_id, user_id) 
    [email protected]? 
    end 

end 

내가이 @subscription 인스턴스와 전화 @의 subscription.subscribed을 할 수 있는지 확인하고 싶습니다 - 순간에 그 방법을 찾을 수 없습니다.

+0

Subscription 인스턴스가 없기 때문에 함수를 찾을 수 없다는 뜻입니까? – rdvdijk

+0

아니요 인스턴스가있는 것 같지만 데이터베이스에서 Subscription의 인스턴스를 올바르게 가져온 경우 가입 된 메서드를 호출 할 수없는 것 같습니다.하지만 그 이유는 모르겠습니다. 그것은 사적인 것 인 것처럼 보이지만 나는 그렇게해야한다고 결코 말하지 않았습니다. – cjm2671

+0

정확한 오류 메시지를 게시 할 수 있습니까? – rdvdijk

답변

2

나는 당신이 좋아하는 일을하고 있다고 생각

@subscription = Subscription.where(task_id, user_id).first 
@subscription.subscribed 

그것은 단지 추측. (인공 지능)를

class Subscription < ActiveRecord::Base 
    attr_accessor :subscribed 

    def subscribed? 
    @subscribed = Subscription.where(task_id, user_id) 
    [email protected]? 
    end 

end 

과 당신이 할 수 있습니다 : 나는 당신의 문제를 이해한다면

0

나는 귀하의 where 전화가 문제라고 생각합니다. 이것을 시도하십시오 :

class Subscription < ActiveRecord::Base 
    belongs_to :task 
    belongs_to :user 

    attr_accessor :subscribed 

    def subscribed? 
    @subscribed ||= !Subscription.where(:task_id => task.id, :user_id => user.id).empty? 
    end 

end 

내가 무엇을하려고하는지 정확히 이해한다면 제대로 작동한다고 생각합니다.

그러나이 방법을 Subscription 모델에 적용하는 것은 여전히 ​​의미가 없습니다. 구독이 있으면 사용자가 자동으로 구독한다는 의미는 아닙니다. 이것은 mabye 클래스 방법이 될 것을 의미합니까? 나는 user.subscribed_to? issue 또는 Issue.has_subscriber? user이 이것을 처리하는 더 좋은 장소라고 생각합니다. 이 같은

@subscription = Subscription.where(task_id, user_id) 
@subscription.subscribed 

대신 뭔가 :

0

, 당신이 할 수있는

s = Subscription.first 
s.subscribed? # true or false 
s.subscribed # the object (@subscribed) 
0

당신의 오류에서 코멘트에, 당신의 목적은 @subscription이 연결되지 않습니다라고 Subscription의 인스턴스가 아니라 대신 관계입니다.

아마 당신은 당신이 배열로 액세스 할 수있는 관계를 반환

@subscription = Subscription.where(... some condition ...) 

같은 것을했다. 따라서 .first으로 첫 번째 요소를 가져 오십시오. 또는 Subscription.find을 사용하십시오.

희망이 도움이됩니다.

관련 문제