2017-03-19 6 views
1

두 모델 UserEmail이 있습니다. 분명히 사용자에게는 senderrecipient과 같은 이메일이 전송됩니다.Rails 열과 정수 배열

모델

has_many :sent_emails, class_name: "Email", foreign_key: "sender_id" 
    has_many :received_emails, class_name: "Email", foreign_key: "recipient_id" 

User에서와 Email 모델

어떻게 연결을 얻고있어, 그의는 내용이었다
belongs_to :sender, class_name: "User", primary_key: "id" 
    belongs_to :recipient, class_name: "User", primary_key: "id" 

만, 문제는 : 나는 ccbcc로 다른 2 열이 예 :

나는 그 열에 대해서도 전자 메일과 사용자 간의 연관성을 만들고 싶습니다.

그래서 내가 추가 할 경우,

=> #<Email id: nil, sender_id: 5, recipient_id: 10, body: "Hello its first email.", subject: "Hello Hello", state: 1, head: nil, tail: nil, created_at: nil, updated_at: nil, cc: [9, 8], bcc: [4,19]> 

내가 Email.first.cc 또는 Email.first.bcc 내가 사용자를 얻을 수 있습니다 할 수 있도록 Email.first.sender 또는 Email.first.recipient 내가, 사용자를 얻을 수 있습니다 할 수있다.

User.first.sent_emailsUser.first.received_emails을 수행 할 수 있으므로 User.first.cc_mails 또는 User.first.bcc_mails을 얻을 수 있습니까?

이와 같은 연관성을 구축 할 수 있습니까?

+0

왜 일대 다 테이블이 아니라 pg 어레이를 사용합니까? –

+0

어떻게? 어떻게해야할지 모르겠다. –

+0

실제로 하나의 이메일에 많은 CC 또는 숨은 참조가있을 것입니다. –

답변

0

더 관용적 레일 식으로 has_and_belongs_to_many 또는 has_many :through 연결을 사용하는 관계 이런 종류의 구축 :하지만 당신은 수동 방법 cc_emailsbcc_emails 만들 수 데이터베이스의 정수 배열 대신 테이블. 위에 링크 된 문서는 이에 대한 데이터베이스 스키마를 작성하는 방법을 설명합니다.

당신은 다음과 같은 사용자 모델 뭔가 연결을 정의 할 수 있습니다 :

has_many :ccs has_many :ccd_emails, through: :ccs

는, 액티브 당신에게 User#ccd_emailsUser#ccd_email_ids을 포함하여 내장 원하는 기능을 줄 것이다이 스키마 및 이러한 연결을 사용하는 것입니다 사용자 인스턴스 또는 정수 ID의 배열과 같은 표현을 각각 제공합니다.

이렇게하면 다른 데이터베이스에 100 % 이식 할 수 있다는 장점이 있습니다.