지난 달에 레일스를 처음 배우기 시작했습니다. 모델 연관성 설정과 관련하여 질문이 있습니다. 나는 내가 다시 돌아가서 내가 이미 한 일을 바꿔야한다고 생각하는 곳을 찾았다. 다음은 시나리오입니다.레일 연결 옵션
나는 다가오는 이벤트를 나열 할 밴드 신청서를 작성 중입니다.
는 몇 가지 중요한 요소가있다
- 독특한 이벤트를해야합니다뿐만 아니라 다른 밴드 (즉,이 개 대역이 사용하는 몇 가지와 함께 몇 가지 이벤트를 공유하는 이벤트를
- 각 밴드를 나열하는 다중 대역이있다 시스템이 같은 장소에서 함께 연주하는 경우)
- 이벤트의 모든 밴드 (장소, 날짜, 시간, 도시, 주 등)에 공통적 인 특정 정보가 있습니다.
- 특정 정보가 있습니다 각 이벤트는 사양입니다. 하나의 대역 (즉, 특정 VIP 티켓 구매 URL을 이벤트에 자신의 설명 등)
현재이 그 설정 방법은 다음과 같습니다
class Event < ActiveRecord::Base
belongs_to :venue
scope :upcoming, where('date >= ?', Date.today)
end
class Venue < ActiveRecord::Base
has_many :events
accepts_nested_attributes_for :events
end
난 정말 내가 같이 아직 예술가 모델과 많은 일을하지 않은 시스템에 이벤트를 가져 오는 데 중점을 두었고 하드 코드 된 1 명의 아티스트에 대해 올바르게 나열되었습니다.
기본적으로 사용자는 이벤트 양식을 만들고 날짜와 시간을 선택합니다. 라인은 장소 이름입니다. 개최지 이름 양식은 DB의 장소 이름 + 도시로 자동 완성됩니다. 사용자가 이미 시스템에있는 장소에서 이벤트를 작성하는 경우 이벤트 정보가 중첩 된 속성으로 Venue 모델을 통해 본질적으로 저장됩니다. 장소가 시스템에없는 경우 위치 데이터에 대한 추가 입력 필드가 나타나고 새 장소가 만들어져 해당 이벤트와 연결됩니다.
아티스트에게 이벤트를 공유하고 해당 아티스트에만 해당하는 이벤트에 대한 세부 정보를 유지하는 가장 좋은 방법에 대해 생각해보기 시작하면 다소 힘들어지기 시작합니다. 모든 이벤트를 개별 이벤트로 취급 할 수는 있지만 쉽지는 않지만이 아티스트가이 필드에 해당 이름을 직접 입력하는 것을 제외하고이 아티스트와 함께이 아티스트와 함께 공연한다고 어떻게 말할 수 있을지 확신 할 수 없습니다. 나는 또한 다른 예술가들과 공연 한 아티스트들과 관련하여 ActiveRecords의 마술을 많이 잃는다.
현재 이벤트에는 단 하나의 모델이 있지만 아마도 가장 좋을지도 모른다. 도시, 주 등의 여러 밴드가 공유하지 않는 이벤트 기본 사항에 대한 1 개의 중앙 모델을 유지 한 다음이를 밴드 특정 정보의 보조 event_details 모델에 연결합니다.
여러 모델을 제안 하시겠습니까? 아니면 여러 아티스트가 공유하는 1 개의 주요 이벤트로 다시 연결되는 이벤트 세부 정보 모델을 만드는 것보다 여러 이벤트를 함께 연주하는 밴드를 연결하는 더 나은 방법이 있습니까? 이벤트 테이블에 특정 유형의 고유 한 이벤트 식별자를 만들어서 다른 밴드가 재생중인 동일한 이벤트와 다른 ID로 이벤트를 처리해야합니까? 내가 그걸로 만 볼 수있는 문제는 그때 내 데이터베이스에있는 많은 데이터를 두 배로 늘릴 것입니다 ... 저는 기본적으로 아티스트가 연주하는이 날짜에 이벤트 데이터를 확인하는 동안 수 있기를 원합니다. 이 공연장에서는 다른 밴드와 함께 밴드가 단순히 연주하는 아티스트를 나열하는 "other_artists"열을 만들어야합니다.
죄송합니다. 이해가 되시길 바랍니다 ... 미리 조언 해 주셔서 감사합니다!
네가 맞다고 생각합니다. 도와 주셔서 감사합니다. – brent
예약 모델을 어떻게 업데이트 하시겠습니까? Venue를 통해 중첩 된 속성을 수락하고 일반 이벤트 모델을 업데이트하는 것과 같은 방법으로 업데이트 하시겠습니까? – brent
이벤트를 통해 예약을 관리합니다. 이벤트 컨트롤러에는 연관된보기가있는 "new_booking"및 "update_booking"작업이 있습니다. Event # show보기에서 new_booking 작업에 대한 "새 예약"링크를 제공 할 수 있습니다. new_booking 작업에서 '@booking = @ event.booking.new'를 사용하여 이벤트 예약 관계를 설정합니다. 그런 다음 연관된보기에서 사용자가 아티스트를 선택하고 특별한 요구 사항/준비 사항을 입력 할 수 있습니다. 이벤트는 예약을 위해 중첩 된 속성을 허용해야합니다. –