2

현재 레일스 3 연습을 많이하고 인증 시스템 작업을하고 있었고 railscasts에 대한 자습서를 따르고있었습니다. 레일 사이먼의 라이언 (Ryan)은 레일을 활용하기 위해 약간의 변경을 통해 튜토리얼을 업데이트했습니다. 3.1코드가 레일즈의 루비 모델에 언제 포함되어 있습니까?

has_secure_password

그래서 내 Sessions_controller의 코드 중 일부가 변경 :

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = User.find_by_username(params[:username]) 
    if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to root_path, :notice => "Logged In" 
    else 
     flash.now.alert = "Invalid Credentials" 
     render "new" 
    end 
    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_path, :notice =>"Logged Out" 
    end 

end 

작성 방법/액션의 코드 중 일부 모델에 있어야한다면 내가 알고 싶은 것은? 이 코드를 가지고있는 것이 좋든 나쁜 것입니까?

올바른 습득 방법을 배우고 나쁜 습관을 배우고 싶지 않을 때 어떤 규칙을 따라야합니까? 내가하지 못했던 것보다 훨씬 더 일반적으로 이해하기 쉬운 프레임 워크를 배웠기 때문에 나쁜 습관을 선택하지 마십시오. .

조언 .. 감사하다 나는 코드가 모델에 속하는 경우 ..
1. 때 프로그래머가 알고 않습니다되고, 특히 알고 싶습니다 무엇

? 어떻게 결정합니까?

답변

3

이것은 OO 프로그래밍에서 가장 중요한 질문 중 하나입니다.

책임에 관한 내용입니다. 모델이 해당 기능을 담당한다고 생각되면 모델에 코드를 추가하십시오.

  • SessionController는 책임을 생성하고 사용자의 세션을 파괴하는 것입니다 : 당신의 예에서

    당신은 것을 알 수있다.

  • User은 인증을 담당합니다.

모든 비즈니스 로직이 모델에 포함됩니다. 컨트롤러는 사용자의 의견을 채우고 사용자의 입력을 처리하며 사용자를 자신의 방식대로 보냅니다. 보기는 단순히 정보를 표시하고 어떤 논리 (있는 경우)도 거의 포함하지 않습니다.

기타 : 영감을 얻기 위해 기존 프로젝트를 살펴보십시오 (예 : Shopify).

+0

감사합니다.이 대답은 나를 해결해주었습니다. – LondonGuy

0

내 조언 : 사용자 모델에서

(의사) :

function authenticate(username, pass) { 
    /*get user by name 
    return user_id (or user object if you need some user data in view) if auth ok, otherwise false 
    */ 
} 

난 당신이 항상 가능한 한 작은 컨트롤러를 유지한다고 생각합니다. OOP에서 가장 중요하게 생각하는 것은 캡슐화이므로 모든 사용자 작업을 사용자 클래스에 작성하고 클라이언트 코드 (이 경우 컨트롤러)로 돌아 가면 어떤 컨트롤러가 자신의 작업을 수행해야하는지 - 사용자 ID를 세션에 추가해야합니다.

+0

-1? 내 대답이 잘못된 곳? – drupality

관련 문제