2012-11-05 4 views
0

난 레일 응용 프로그램에서 일하고 있고 나는 3 가지 사용자 유형이 있습니다. 이러한 사용자는 잠재적으로 매우 다를 수 있으므로 각 사용자에 대한 모델을 만들었습니다. 이제 그들은 단일 양식을 통해 로그인 할 수 있어야합니다. 그래서 기본적으로 'find_by_email ("some_email")'과 같은 것을 말하고 싶지만 세 테이블 모두를 검색하십시오. 레일스는 Admin.find_by()와 같은 특정 모델로 'find_by'를 호출 할 것으로 기대합니다. 어떤 제안?레일 find_by_email 여러 테이블

답변

1

시도의이 같은 및 이메일이 모든 테이블

[Model1, Model2, Model3].each do |model| 
    break if model.find_by_email("[email protected]").present? 
end 
0

에서 고유 있다는 희망이 조기에 개발이라고 가정하지만, 현재의 구조는 최적의 경로를하지 않을 수 있습니다. 얼마나 많은 다른 열이 각 사용자 유형에서 공유되지 않습니까? "사용자 역할"시스템을 사용하여 단순히 사용자 테이블에 추가 열이되도록 할 수 있습니다.

이상으로 CanCan과 같은 것을 사용하여 역할 및 액세스 할 수있는 대상/위치를 관리 할 수 ​​있습니다.

+0

저는 처음부터 실제로 그렇게했습니다. 그리고 정상적으로 작동했습니다. 그러나 나는 이것이 미래에 문제가 될 것이라고 약간 걱정하고있다. 나는 다양한 사용자가 꽤 다른 것으로 끝날지 모른다는 생각을 가지고있다. 보다 간단한 접근 방식을 유지하면 어떤 이점이 있습니까? – Kasper

+0

데이터 구조가 더 정확하다고 나는 말할 것입니다. 실제로 사용자 목록이 하나 있고 사이트/앱마다 다른 역할을합니다. 또한 CanCan과 같은 기능을 사용하면 프로그래밍 방식으로 역할을 아래쪽으로 할당하는 것이 쉬워집니다. 나는 그것을 선호 할 수는 있지만 장기적으로 관리하는 것이 더 쉬울 것이라고 생각한다. 'User.where (전자 메일 : "전자 메일 주소", 역할 : "admin")' –

+0

그래, 실제로이 기술을 계속 사용한다고 생각해. 나는 정말로 "가장 좋은"방법이 무엇인지 알 수 없다. STI가 처음부터 충분히 잘 작동 한 이후로 나는 그것에 충실 할 것입니다. 어쨌든 두 기법을 모두 후회할 것입니다 :) – Kasper