각 사용자가 하나 이상의 전자 메일을 많이 가질 수있는 시스템을 모델링하려고합니다.두 모델을 동시에 생성하십시오.
create_table :users do |t|
end
create_table :user_emails do |t|
t.integer :user_id, null: false
t.string :email, null: false
end
add_index :user_emails, :email, :unique => true
add_foreign_key :user_emails, :users, dependent: :delete
다음과 같은 레일 모델 :
class User < ActiveRecord::Base
has_many :emails, class_name: 'UserEmail', dependent: :destroy
def self.find_by_email(email)
UserEmail.find_by(email: email).try(:user)
end
validate do
if emails.count < 1
errors.add(:emails, "is empty")
end
end
end
class UserEmail < ActiveRecord::Base
belongs_to :user
validates_presence_of :user_id, :email
validates_uniqueness_of :email
end
지금은 그 중 하나를 만들 수 아니다
에 따라 좋은 정규화 규칙은 내가 두 마이그레이션 (간결함을 제거 일부 필드를) 생성 . 적어도 UserEmail이 필요하므로 사용자를 만들 수 없습니다. 동시에 UserEmail이 필요하기 때문에 UserEmail을 미리 만들 수 없습니다.
나는 내가 생각할 수있는 @user.emails.build
과 @user.emails << e
의 조합을 시도했다고 생각합니다.
어떻게하면 데이터 일관성을 잃지 않고이 간단한 문제를 해결할 수 있습니까? (하나는 저장되고 다른 하나는 저장되지 않습니다)?
P.s .: 유효성 검사를 완화하고 트랜잭션을 사용하면 문제를 일관되게 해결할 수 있습니다. 그러나 나는 레일에서 거래를 한 번도 해본 적이 없기 때문에 어떤 도움도 정말로 감사 할 만하다.
감사
@ user_email.build_user을 시도 해본 적이 있습니까 – Nishu
비어있는 user_id에서 유효성 검사 오류가 여전히보고됩니다. –