2016-10-18 4 views
0

다른 모델에서 SQL 쿼리를 수행하는 facade 클래스가 있습니다. 나는 스코프를 사용하고 싶었지만, 구현할 위치에 대해 의문을 품고, 평범한 메서드를 사용하는 것보다 낫다면 의심 스럽다. 좋은 프로그래밍 실습에 대한 우려도 있습니다. '올바른 범위 배치

def Function1(param) 
    @var = @user.instances.where("...", param).order(:start_time).group_by { |x| x.method} 
end   
def Function2 
    @var = @user.instances.where("...").first 
end 
def Function3 
    @var = @user.projects.distinct 
end 

1) (1) 기능과 2는 사용자 모델에 대한, 또는 경우에해야합니다

첫째, 내 모델

class User < ActiveRecord::Base 
    has_many :projects 

class Project < ActiveRecord::Base 
    belongs_to :User 
    has_many :tasks, :inverse_of => :project 

class Task < ActiveRecord::Base 
    belongs_to :project, :inverse_of => :tasks 
    has_many :instances 

class Instance < ActiveRecord::Base 
    belongs_to :task 

외관 클래스입니까?

2) function3은 User 모델 또는 프로젝트에 있어야합니까?

3) 예를 들어 프로젝트에 '고유 한'범위를 쓰고 프로젝트를 호출하는 '사용자 별 프로젝트'범위를 쓸 수 있습니까?

답변

1

1) 기능 1과 기능 2가 사용자 모델 또는 인스턴스 '에 있어야합니까? 인스턴스에서

- 당신은 사용자 모델에 또는 '프로젝트에 기능 3이어야한다

2) 반환되는 인스턴스의 범위를 제한하는거야?

프로젝트 - 위와 마찬가지로. 사용자는 여전히 사용자이지만 어떤 프로젝트가 반환되는지 제한 할 것이므로 프로젝트 범위입니다

3) 예를 들어 프로젝트에 '고유 한'범위를 쓰고 '사용자 별 프로젝트'범위를 작성할 수 있습니까? 프로젝트를 호출?

예, 실제로 사용자가 distinct_projects 범위를 다른 곳 (예 : 다른 범위)에 재사용 할 가능성이없는 한 실제 범위에서 사용자 distinct_projects 범위를 수행 할 가치가 없습니다.) 입력 한 내용을 저장하지 않습니다.)

+0

감사합니다. function2가 생성 한 범위에서 '.first'를 제거했습니다. – Gaston

관련 문제