2013-06-03 4 views
0

저는 초보자입니다. 레일즈의 모든 미묘함을 이해할 수 없기 때문에 내 앱이 실패 할 지 알 수 없습니다. 그래서 내가 사용자와 제품 모델이레일 모범 사례 : 모델의 공용 메소드

:-) 물어 선호하고, 나는 그처럼 사용할 수있는 방법을 만들려면 :

@user.take!(product) 

그래서 내가 쓴 내 사용자 모델 다음 줄 :

def take!(product) 
    product.owner = self 
end 

하지만 내 모델의 개인 섹션에서 작동하지 않음을 할 경우. 그리고 내가 공공 구역에서 그렇게한다면, 그것이 권장되는지 나는 모른다. 컨트롤러 나 헬퍼에서 그렇게하는 것이 더 나을지 스스로에게 묻고 있습니다 ...

저를 계몽 할 수 있습니까?

답변

0

공개 방법을 쓰는 것이 좋으면 공개적으로해야합니다. 매달린 공격이나 그와 같은 것이 아닙니다. 설명하는 방법은 사용자에게 있어서는 안됩니다. 사용자 모델 내에 제품 로직을 넣을 필요가 없으며, 사용자 메소드에 제품을 전달하여 제품을 변경하는 것이 좋습니다. 그것은 또한 매우 짧은 방법이기 때문에 메서드에 넣는 것으로 얻게되는 것이별로 없습니다. 즉, take!을 보면 이해할 수 있도록 정의 된 부분을 찾아야합니다. 또한 예외를 발생 시키거나 호출 된 객체를 변경하는 메소드 끝에는 ! 만 사용해야합니다.

이 논리를 컨트롤러에 넣는 것은 좋지만 훨씬 명확합니다.하지만 일반적으로 개인적인 것이 될 수없는 공용 메서드에는 아무런 문제가 없습니다.

+0

감사합니다. 이 경우 어떤 컨트롤러에서 내 def를 써야합니까? –