2012-06-12 3 views
0

지금 당장 두 개의 테이블, 사용자 및 역할이 있으며 물론 역할에는 user_id가 있고 역할 모델에는 belongs_to :user이 있고 사용자 모델에는 has_one :role이 있습니다. 내가 궁금해하는 질문은 사용자 모델이 역할 모델에 새 레코드를 작성하게하려면 어떻게해야합니까? 나는 내가 모델을 만들 때처럼 쉽게 모델 밖에서이 작업을 수행 할 수 있다는 것을 이해하지만, 사용자 모델에서보다 간소화되고 모든 것을 한 곳에서 관리하고 단순화 할 수 있다고 생각합니다. 저장하기 전에 사용자의 ID를 모른 채 쉽게이 작업을 수행 할 수있는 방법에 대한 제안이 있습니까?has_one 또는 has_many를 사용할 때 자동으로 새 레코드를 삽입하십시오.

참고 : (?. new_record에 해당하는 경우 난 단지 그렇지 않으면 금지됩니다, 이것을 허용 것이다) 나는 사용자 &의 설정과 비슷한 일을하고 있어요

+0

사용자가 하나의 역할 만 가지고있는 경우, 마이그레이션을 통해 사용자 모델에 역할 열을 추가하는 대신 왜 역할에 별도의 테이블을 사용해야하는 이유는 무엇입니까? – ply

+0

@ entropy_9 아마도 'has_one'에 의해 생성 된 연관성을 혼동하는 것 같습니까? 역할 테이블에있는 사용자 has_one 행이 하나의 절대 역할 만 갖고 있다는 것을 의미하지는 않습니다. 예 사람들은 has_many를 사용하기를 선호합니다. (필자는 이것을 많이 보았습니다.)하지만 테이블의 행에 일대일 역할과 사용자가 연관되어있는 시점은 무엇입니까? 문서를 오해하지 않는 한 비효율적 인 IMO가 생성됩니다. –

+0

아, 오케이 내가 오해를 이해해야합니다. 과거에 비슷한 문제가 있었지만 이전에는 User 테이블에 '역할'필드를 추가하여 마이그레이션에서 기본 역할 (예 : 사용자/게스트)을 지정 했으므로 원래 주석에 기댈 수있었습니다. – ply

답변

0

을, 아마이 당신을 위해 일할 수 :

class User < ActiveRecord::Base 

#... 

has_one :role 
before_create :build_a_role 

private 
    def build_a_role 
    self.build_role(role_att: value) 
    end 
end 

그런 다음 사용자를 저장하면 역할도 저장됩니다.

관련 문제