2

사용자가 다른 역할 (예 : 판매자, 구매자, 대행사 등)을 가질 수있는 앱을 제작 중입니다. 그래서 내 계획은 다형성 연관을 사용하고 각 역할에 대한 클래스를 작성하고 각 인스턴스를 하나의 사용자 계정과 연관시킵니다. 각 사용자는 이러한 유형 중 하나 일 수 있으며 주제를 읽은 후에 STI를 사용하는 것보다 낫다는 결론을 내 렸습니다.하나의 양식과 '새'작업으로 두 개의 다른 클래스로 된 두 개의 객체를 만드는 방법은 무엇입니까?

그래서 앱에는 주요 유형의 사용자 계정에 대해 다른 가입 화면이 있습니다. 예를 들어, 판매자 등록 양식에서 사용자 계정과 판매자 프로파일에 고유 한 필드에 필요한 세부 사항을 채우게됩니다.

따라서이 양식은 사용자 개체를 생성 한 다음 이전 개체와 연결된 판매자 개체를 만들어야합니다. 어떻게 처리합니까? 내 생각에이 양식은 판매자 컨트롤러의 '새'작업에 해당해야하며 작성 작업에서 사용자 계정을 만들어야 최종적으로 판매자를 생성 할 수 있습니다.

이 정보가 맞습니까? 그렇다면 사용자 컨트롤러가 판매자 컨트롤러에서 작업을 생성하거나 사용자 모델을 직접 호출해야합니까? 이전 코드라면 예제 코드를 제공하십시오. 컨트롤러를 다른 컨트롤러에서 호출하는 방법에 대해 확신하지 못하기 때문입니다.

편집 : 나는 멀티 파트 폼을 사용하는 것을 고려했는데, 아마 더 쉽지만, 결정하기 전에이 옵션을 체크 아웃하고 싶습니다.

답변

1

이렇게하면되는 경우 판매자 컨트롤러의 작성 메소드에서 모델을 호출하면됩니다. 사용자 모델과 판매자 모델간에 어떤 유형의 관계가 있습니까? 당신이 이런 식으로 뭔가를해야 할 것 때문에 : 여기

def create 
    user = User.create(params[:user]) 
    seller = Seller.new(params[:seller]) 
    seller.user_id = user.id 
    seller.save 
    redirect_to #wherever 
end 

을 난 그냥 당신이 판매자 모델의 belongs_to :user을 가정한다. 아직도 나는이 접근법 대신에 칸칸 (cancan) 같은 보석이나 역할을 다루는 것을 고려해 보라고 조언합니다.

행운을 빈다.

+1

그래도 권한 부여를 넘어선 문제는 아닙니까? @oalo는 "역할"이라는 용어를 사용하지만 실제로는 프로필 인 것처럼 들립니다. 그렇다면, 사용자'belongs_to : profile, : polymorphic => true'가있는'User'와'Profile' 사이에 다형성 연관을 사용할 이유가 있다고 생각합니다. – Feech

+0

참. 특히 사용자 프로필이 많이 다른 경우. –

+0

예, @Matt, 프로필을 훨씬 더 정확하게 말 했어야합니다. 판매자와 일반 사용자의 프로필은 많이 다르며 다양한 분야가 있습니다. –

1

중첩 된 양식을 사용할 수 있습니다. 사용자에게는 하나의 역할이 있습니다. 이 railscast를 볼 수 있습니다 : http://railscasts.com/episodes/196-nested-model-form-part-1, 중첩 된 양식을 사용하는 방법을 설명했다. 사용자와 역할을 생성 할 때 사용자 컨트롤러를 호출하게됩니다.

+0

@oalo와 비슷한 응용 프로그램 디자인을 사용했지만 불행히도 다형성 배열을 사용하여'accepts_nested_attributes_for'를 사용하는 것이 정말 해킹 된 것처럼 보입니다. – Feech

0

이 질문에 대해서는 다른 접근 방식을 사용합니다. 한 가지 역할 수업을하십시오. 그런 다음 사용자 클래스에 메소드를 작성하십시오.

def can_assign_users? 
    roles.map(&:name).includes('admin') 
end 

그렇지 않으면 몇 년 내에 50 개의 모델이있을 수 있습니다. 거기에 이와 같이 작동하는 많은 보석들이있어 당신이 그들을 활용할 수 있습니다.

+0

그러면 다른 역할에 대한 추가 열, 메서드 및 뷰를 어떻게 처리 할 수 ​​있습니까? 특히 두 가지 유형, 최대 세 가지 유형의 사용자가있을 것이기 때문에 이것은 너무 복잡합니다. 이 경우 어떻게 생각하세요? –

관련 문제