4

질문

나는 권한 부여 및 인증 논리를 가진 사용자 모델을 가지고 있습니다.레일에서 다른 사용자를 모델링하는 방법

이제 세 가지 유형의 사용자가 있음을 알았습니다. 각자 다른 정보를 저장하고 싶습니다.

레일스에서 ​​이것을 처리하는 가장 좋은 방법은 무엇입니까? 현재 기록에 따라

생각

내가 STI 보았지만 내가 읽은 것과 내 데이터베이스에 NULL 필드를 많이하게 될 겁니다 있기 때문에 부적절하다고 생각했습니다.

이상적으로 저는 세 가지 사용자 유형 각각에 대한 인증/권한 부여 논리를 복제하지 않는 것이 좋습니다.

각 사용자는 응용 프로그램 내에서 다른 기능을 사용하게됩니다.

+0

모델/db에 user_type 속성을 추가 한 다음 사용하도록 허용 된 활동/기능으로 user_types를 매핑하는 모델을 설정해야합니다. – rnirnber

+0

그러나 이것은 여전히 ​​사용자 테이블이 하나 있다는 것을 의미합니까? 그래서 하나의 사용자 (유형 A)와 이름, 이메일, 주소, dob, 다른 이름 (유형 B)의 이름과 이메일을 저장하려면 모든 사용자 유형에 대해 많은 null 필드가 필요합니다. – cmd

+0

일반 필드를 설정해야합니다. 레일즈에서는 액티브 레코드의 serialize/deserialize 함수가 도움이 될 것입니다. 배열과 같은 더 나은 데이터 구조가 있습니다. 그러나 쉽게하기 위해 이걸 가지고가 봅시다. models/user.rb에서 텍스트 필드를 설정하고 사용자 정의/변수 옵션을 단일 필드에 저장합니다. 어쩌면 user_profile이라고 부르세요. 해당 열에 대한 하나의 레코드는 "dob : 031388 \ nphone : 8312229999 \ nemail : [email protected]"과 같은 모양 일 수 있으며 "\ n"문자 – rnirnber

답변

0

이렇게하는 방법은 다양합니다. 하나의 접근 방식이 있습니다 :

다른 유형의 사용자를 생각하는 대신 명의 사용자가 가지고있는 역할을 생각할 수 있습니다.users, butchers, bakers, candlestick_makers : 사용자가 정육점, 제과점, 또는 촛대 메이커가 될 수 있다면

예를 들어, 네 개의 테이블을 가질 수있다. 후자의 세 역할 테이블은 각각 ​​user_id 열을가집니다. 그들은 사용자에게 속합니다.

특정 사용자에게 하나의 역할 만 부여해야하는 경우이 데이터베이스 스키마는 단일 사용자에 대해 여러 역할을 허용하므로 응용 프로그램에서 하나의 역할 만 수행해야합니다.

이 방법은 해당 역할 테이블에 속할 물건이 많으면 좋습니다. 그렇지 않다면 users 테이블에 일부 NULL 컬럼을 남겨두면 아마도 당신을 죽이지 않을 것입니다.

+0

세 명의 테이블을 가지고 있다면 푸줏간 주인, 베이커, candlestick_makers 모두 내 사용자 모델에 대한 논리를 사용하여 로그인 할 수 있습니까? – cmd

+0

아이디어는 인증이 사용자 모델 만 보게된다는 것입니다. 한번 로그인하면'user.butcher_role! = nil' 여부에 따라 리다이렉션 할 수 있습니다. – benzado

1

polymorphic associations을 사용하고 모든 유형의 사용자가 가지고 있으며 별도의 테이블에 다른 데이터를 넣는 데이터로 표 users을 만들 수 있습니다. 이 주제를 다루는 Railscast epizode

+0

나는 (사용자와 관련된 다른 프로파일을 만들기 위해) 여기서 다룬 것처럼 다형성 연관을 사용하려고 시도했지만 작동시키지 못했습니다. http://stackoverflow.com/questions/7719600/designing-a-rails-application-single-table-inheritance - 당신이 제안한 방식으로 다형성 연관을 사용하는 것을 생각하지 않았습니다. ~을 찾고 :) – cmd