2011-10-14 2 views
0

저는이 책의 8 장에 "new"와 "create"액션이있는 샘플 애플리케이션의 등록 기능을 구현하려고합니다. 그가에 액세스 할 수 있도록 여기에 @user 정의 된 "새로운"액션/방법은 사용자 컨트롤러 여기Ruby On Rails 3 튜토리얼 8 장 : 사용자 컨트롤러 구현

class UsersController < ApplicationController 
    . 
    . 
    . 
    def new 
    @user = User.new 
    @title = "Sign up" 
    end 
end 

에서 다음과 같이 정의된다

이 두 방법/작업에 대한 내 질문입니다 가입을위한 html 페이지의 양식. 즉시 사용자가 가입 버튼 안타로 "만드는"액션/사용자 컨트롤러의 방법은 호출되는, 활동 만들기위한 코드/방법은 다음과 같습니다, 여기

class UsersController < ApplicationController 
    . 
    . 
    . 
    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     # Handle a successful save. 
    else 
     @title = "Sign up" 
     render 'new' 
    end 
    end 
end 

내 질문입니다,

이유 우리는 "new.method/action 내부에서"User.new "를 두 번 두 번 호출하고"method/action "을 작성합니까? 나는이 아래와 같은 방법을 만들 구현하는 경우 어떤 답장을

감사합니다,

, 나는 새로운 방법이 잘못되는 두 번째 전화를 제거했습니다. 만약 그렇다면 무엇이 잘못 되었습니까?

def create 
if @user.save 
    # Handle a successful save. 
else 
    @title = "Sign up" 
    render 'new' 
end 

끝 "

감사

답변

0

User.new가, 새 사용자보기를 채울 필드를 생성하는 데 사용되는 메모리 모델을 만들라고 처음. 그 HTML 페이지가 클라이언트에 반환되고 서버가 모든 것을 잊어 버린다. 클라이언트가 폼을 채우고 다시 서버에 커밋하면 컨트롤러에서 create 메소드가 호출된다. 컨트롤러가 수행하는 첫 번째 작업은 새로운 사용자 모델을 만들고 매개 변수로 값을 채 웁니다. 그때까지 새 메서드가 두 번 호출되는 이유는 무엇입니까?

+0

답장을 보내 주셔서 감사합니다. 다시 질문하십시오. – user995487

1

erb보기에서 form_for 구현을 사용하는 경우.
@user 객체를 사용하여 필드를 객체 속성과 연결합니다. 이 필드는 키 값 쌍으로 전달됩니다.

<%= form_for @user do |u| %> 
    <%= f.text_field :name %><br /> 
    <%= f.text_field :age %><br /> 
    <%= f.submit %> 
<% end %> 

이렇게하려면 새 방법으로 빈 사용자 개체를 만듭니다.

작성 메소드에서 제출 된 params로 오브젝트를 작성합니다. 매개 변수에서 직접 User 개체를 만들고 개체의 유효성을 검사하고 저장하는 데 도움이됩니다.

@user = User.new(params[:user]) 

양식 제출 후 요청 매개 변수는 사용자 개체 특성으로 키와 함께 전달됩니다.

+0

답장을 보내 주셔서 감사합니다. 다시 질문하십시오. 수정했습니다. – user995487

+0

이것은 @user가 초기화되지 않았기 때문에 작동하지 않습니다. create 메소드는 게시 된 매개 변수를 사용하여 새 사용자 객체를 만드는 것을 의미합니다. 제거한 명령은 바로 그 명령을 수행합니다. 요청 매개 변수의 값으로 새 사용자 모델 객체를 만든 다음 데이터베이스에 저장합니다. – Jayendra

0

새 작업의 첫 번째 새로운 기능은 비어있는 객체를 얻는 데 필요하며 나중에 뷰의 사용자 양식에서 사용되므로 Rails 양식 도우미가 양식 객체를 결정하고 Rails가 필요로하는 정보를 얻을 수 있습니다. 폼의 모든 기본값을 자동으로 설정합니다 (예 : UserController에 대한 기본 URL). 이 정보를 사용하여 양식과 페이지가 렌더링되고 레일스는이를 잊어 버립니다.(모델에 일부 속성에 대한 기본값이있는 경우 해당 값이 설정되어 양식에 표시됩니다.)

이제 브라우저에 양식이 있으며 값을 입력하고 제출하십시오. 이 제출은 작성 조치에 의해 처리됩니다. 여기서 두 번째 새는 오브젝트를 작성하고 양식에서 제출 된 값으로 채우며 이제는 params 해시에서 사용 가능합니다. 이 객체에는 값이 있고 @user.save 호출은 유효성 검사를 통과하면 결과를 true로 설정하여 데이터베이스에 저장합니다. 필수 필드에 누락 된 데이터와 같은 오류가 있으면 저장이 실패하고 '새'보기의 양식이 다시 렌더링됩니다. 이번에는 생성 된 객체의 데이터로 모든 유효한 데이터가 입력 필드에 채워집니다.

+0

답장을 보내 주셔서 감사합니다. 아래 예제와 같은 create 메소드를 구현하면 새 호출 인 두 번째 호출이 제거 되었습니까? 만약 그렇다면 무엇이 잘못 되었습니까? [code] [code] def create 'code'if @ user.save # 성공적인 저장을 처리하십시오. else @title = "가입" 렌더링 '신형' 끝 끝 감사합니다. – user995487

관련 문제