레일즈에서 다형성 연관을 통해 Customer
과 Seller
두 모델에 연결된 모델 User
(인증 목적으로 사용됨)이 있습니다. 고객 및 판매자는 서로 다른 데이터로 인해 서로 다른 가입 양식을 가지고 있어야하지만 모두 Users
이기 때문에 단일 로그인 양식을 사용할 수 있습니다. 고객과 판매자 자원을 개별적으로 관리하려면 컨트롤러와 뷰를 각각 생성하거나 모든 사용자의 관리를 UsersController
에서 수행해야합니까?레일즈 다형성 연관 - 컨트롤러와 뷰?
답변
@madyrockss가 지적했듯이 User.find (params [: login])가 Customer 또는 Seller의 인스턴스를 자동으로 반환하기 때문에 STI가 여기에 있습니다.
판매자 및 고객 컨트롤러/뷰 관점에서 UsersController 및 뷰를 잊어 버리고 (즉, 단일 컨트롤러를 공유하지 않고 고객 또는 판매자를 처리 할 수있는 작업 당 뷰를 공유하고 조건부 보기에서 무엇을 보여줄지 결정). 두 명의 사용자가 서로 다른 비즈니스 규칙을 갖고 있다면, 모든 것이 지저분 해지기 쉽고 비즈니스 규칙이 변경됨에 따라 다루기 힘들어집니다.
로그인/로그 아웃의 경우 폼이 둘 다 동일 할 경우 단일 컨트롤러로 충분하며 SessionsController와 같은 의미있는 이름을 UsersController와 다른 것으로 생각할 수 있습니다. 컨트롤러의 목적은. 당신은 일대일 모델에 국한되지 않습니다. < ==> 컨트롤러 < ==> 많은 Rails 개발자들이 함정에 빠지게되는 견해.
예, 로그인을 관리하는 SessionsController가 있습니다. 하지만 CRUD 사용자에게는 UsersController를 사용합니다. – user3193550
두보기 고객 및 판매자의 디자인에 따라 다릅니다. 뷰 모두의 디자인이 다른 경우, 나는 두 개의 컨트롤러 customers_controller
및 sellers_controller
를 작성하는 것이 좋습니다 것입니다 그리고 당신은
# customers_controller.rb
include Authentication
def some_action
end
및
# sellers_controller.rb
include Authentication
def other_action
end
을
lib/authentication.rb
같은 일반적인 작업에 대한 모듈을 갖고 싶어 낭포 수 있습니다
# lib/authentication.rb
module Authentication
def common_method
end
end
같은
인증 파일은 두 컨트롤러는 일반적인 운전 방식을 쓸 수있는 하나 개의 모듈을 가질 수 있습니다 ds/actions
다형성 연결 대신 단일 테이블 상속 (STI)을 사용해야한다고 생각합니다. 고객 및 판매자는 사용자 유형입니다. 그런 다음 단일 양식을 사용하여 두 유형의 사용자 모두의 로그인을 관리 할 수 있습니다. –
@ madyrockss Single Table Inheritance를 살펴 보았지만 판매자의 데이터와 동일한 테이블에 고객의 데이터를 저장했기 때문에이를 결정했습니다. 나는 많은 다른 분야가 있기 때문에 이해가되지 않았다. 나는 테이블이 혼란 스러울 것이라고 생각하고 그것들을 별도의 모델로 유지하기를 원한다. 그래서 나는 다형성 결합을 선택했다. – user3193550