한 가지 측면에서 3 가지 모델 관계에 대해 연구 중이며 접근 방법을 잘 모르고 있습니다. 여기에 기본적인 관계이다 :세 모델 관계 중 레일 유효성 확인
이 한 가지를 제외하고 매우 간단 물건class Taxonomy
has_many :terms
# attribute: `inclusive`, default => false
end
class Term
belongs_to :taxonomy
has_and_belongs_to_many :photos
end
class Photo
has_and_belongs_to_many :terms
end
:
란다 될 수 있습니다 '인 클루 시브'또는 '독점'. 배타적이란 용어는 상호 배타적이며 배타적 인 의미는 배타적 인 의미입니다.
이제 문제없이 클라이언트 측에서 처리 할 수 있지만 기본적으로 Photos (또는 다른 어딘가)에서 유효성 검사를 설정하는 방법을 잘 모르겠습니다. "하나 이상의 용어가 유효하지 않음을 확인하십시오. 독점 택 소노 미 (exclusive taxonomy)가이 기록과 관련이 있습니다. "
는또한 보너스 질문
, 그것은 중요하지있는 동안, 나는 그것이이 분류 체계 및 사진, 예. 사이에 어떤 종류의 가입 설정에 좋을 것이다 생각해 봤는데, 내가하는 쉬운 방법을 싶습니다 지정된 분류에서 용어로 분류 된 모든 사진을 쿼리합니다.
나는 이것을 Photo.where('term_id in ?', Taxonomy.find(1).terms.map(&:id))
과 같이 할 수 있다고 생각하지만, 그다지 우아하지는 않습니다. 저는 꽤 확신합니다. has_many : 용어는 사진에 관한 것이므로, 누군가가 그 관계를 설정하는 더 우아한 방법을 알고 있다면, 듣고 싶습니다.
감사합니다. 분류 체계는 exclusive
즉 경우
:
업데이트, 추가로 분류 아이디어를 설명합니다. taxonomy.inclusive = false
이면 지정된 사진에 첨부 된 해당 분류의 용어 하나만있을 수 있습니다. 이제 사진에 여러 분류가 적용될 수 있습니다.
분류 : 색상, 클루 시브 조건 : 레드 (ID 1), 블루 (ID 2), 녹색 (ID 3)
분류 : 지역, 독점 조건 : 북미 (ID 4) 예를 들어 , 남아메리카 (id 5)
우리는 빨간색과 파란색이 많은 사진을 가지고 있다고 가정 해 봅시다.이 두 용어를 가져오고 남아메리카에있을 수 있습니다. 그러나 사진은 북미와 남미 모두에서 사용할 수 없습니다.
그래서이 경우에 우리가 호출하는 경우 : photo.terms.map &:id
우리가 기본적으로 내가 할 수있는 클라이언트 측 (의사 코드)
form_for photo
- Taxonomy.each do |tax|
- if tax.inclusive?
- tax.terms.each do |term|
- check_box term
- else
- tax.terms.each do |term|
- radio_button term
에 [1,2,4]
을 얻을 것입니다 그러나 모델 측면에서, 나는 싶습니다 예를 들어, 사진은 term_id 1,2,3 중 하나 또는 4,5 중 하나만 가질 수 있습니다.
의미가 있습니까?
class Term
validates :taxonomy_id, uniqueness: true, unless: Proc.new { |term| term.taxonomy.inclusive }
end
당신은 또한 custom validation method으로이 작업을 수행 할 수 있습니다
유효성 검사 문제에 대한
Adrien, 감사합니다! 그냥 분명히 말하자면, 독점 택 소노 미의 일환으로 하나 이상의 용어가있을 수 있습니다. 하나 이상의 용어가 사진과 관련되어서는 안됩니다. 그래서, 당신이 설명하고있는 유효성 검사가 그 것을 포함합니까? '배타적'택 소노 미를 한 용어로 제한하는 것처럼 보이지만 '독점'분류에서 한 용어로만 사진을 분류하는 것은 아닙니다. – Andrew
죄송합니다. 귀하의 필요를 오해 했습니다만, 귀하가 원하는 유효성 확인으로 답변을 업데이트했습니다. –
글쎄, 하나의 나머지 문제는 하나 이상의 분류에서 용어를 가질 수 있기 때문에, 사진은 여러 용어를 가질 수 있습니다. 따라서 habtm이라는 용어로 분류학을 위임 할 수 없습니다. 나는 이것이 합병증의 대부분을 일으키는 것 같아요. – Andrew