2016-07-06 2 views
0

모델 인스턴스 메서드를 where 절 쿼리로 사용할 수 있는지 궁금합니다. 내말은.where 절의 메서드 사용하기 Rails Ruby Active Record

School.all.map{|x| x if x.my_method} 

그러나이 방법 : 내가 뭔가를 할 수 있다는 사실을 알고

School.all.where(my_method: true) 

: 나는 방법 모델 학교

class School < ActiveRecord::Base 

    def my_method 
    users.where(blablabla).present? 
    end 

end 

그것을 추적 할 수없는 가망 같은 것을 얻을 수 있나요 정의해야 질의와 비교하여 성능면에서 엄청난 처벌을받습니다. 게다가 내가 찾고있는 것을 반환하는 것은 ActiveRecord Relation이고, map은 배열을 반환합니다.

는 UPDATE :

또한이 좋아 할 수있는 또 다른 방법이있다 :

School.all.joins(:users).where("users.attribute = something") 

그러나 이것은 여러 가지 이유로 정확하게 내가 원하는 적합하지 않습니다.

미리 감사

+0

는, 그것을 통해 이동하시기 바랍니다 범위 레일을 통해 당신이 거 가지고 .. 이것은 당신이 http://stackoverflow.com/questions/4869994/를 찾고 있습니다 할 수있다 범위 - 명명 된 - scope-in-rails – chaitanya

+0

당신의 방법이 달성되어야한다고 주장 할 수 있다면 당신의 질문은 아마 더 쉽게 소화 될 것입니다. 디자인 결정을 설명해야합니다. 메소드를 평가하고 그 결과를 'where'또는 'where'에 대한 조건을 동적으로 작성하려고 시도하는 중입니까? –

답변

1

에 난 정말 당신의 모델 사이의 관계를 알 수 없습니다.

그러나 where 절은 키 - 값의 해시를 가져옵니다. 예를 들어 사용자의 ID를 일종의 해시로 반환 한 다음 사용할 수 있습니다.

def my_method 
    {user_id: users.where(blablabla).ids} 
end 

및 사용 :

School.all.where(my_method) 
관련 문제