2013-07-27 1 views
0

나는 Rails 앱에 두 개의 엔티티가 있습니다.이 두 엔티티는 수표와 달입니다. Month of Instance는 start_date 및 end_date를 가지며이 날짜는 달력 월과 정확히 일치하지 않습니다. Check의 인스턴스는 deposit_date를 갖습니다. 예금 일자가 달의 시작일과 종료일 사이에있는 곳에 수표가 여러 달있는 관계를 어떻게 든 설명하고 싶습니다. 이것이 가능한가?Rails와 외부 키의 관계는 무엇입니까?

답변

0

은 has_many 제거했다 : 달 클래스 검사를하고, 내 자신의 방법 정의 :이이 해킹으로 간주 될 경우 나도 몰라

class Month < ActiveRecord::Base 
    # other associations and validations omitted 

    def checks 
    Check.where(deposit_date: self.start_date..self.end_date) 
    end 
end 

을하지만, 내가 필요한 것을 나에게 주었다. 물론 이것을하기 위해 더 많은 'Rails 방식'을 볼 수 있습니다.

1

가능합니다. relation 참조를 사용자 정의 할 수 있습니다. 당신이 할

class Month < ActiveRecord::Base 
    has_many :checks, ->(month) { where deposited_at: (month.start_at)..(month.end_at) }, class_name: 'Check' 
end 

은 실제로 당신이 당신의 관계 이름을 변경하지 않는 한 class_name를 지정해야합니다. 예를 들어, 이름을 지정하는 대신 current_checks이있는 경우 간단히 checks입니다. 나는 결국 무슨 짓을

+0

그 대답이 도움이 되었습니까? –

+0

많은 감사합니다! 그 트릭을했다. – user1706938

+0

실제로, 나는이 접근법이 내게 오류가 아니지만, 나에게 기대되는 결과를주지 못했다는 것을 발견했다. 문제는 수표와 달 사이의 기본 키/외래 키 관계를 여전히 예상하고 성명 끝에 람다를 추가 한 것이 었습니다. – user1706938

관련 문제