티스토리 뷰

안녕하세요 강정호입니다. 오늘은 레일즈로 회원가입하는 코드에 대해서 알아보겠습니다.


[회원 가입 폼]

<%= render 'shared/errors', obj: @user %>

<div class='row'>

<div class='col-xs-12'>

<%= form_for(@user, :html => {class: "form-horizontal", role: "form"}) do |f| %>

<div class="form-group">

<div class="control-label col-sm-2">

<%= f.label :username %>

</div>

<div class="col-sm-8">

<%= f.text_field :username, class: "form-control", placeholder: "Enter username", autofocus: true %>

</div>

</div>

<div class="form-group">

<div class="control-label col-sm-2">

<%= f.label :email %>

</div>

<div class="col-sm-8">

<%= f.email_field :email, class: "form-control", placeholder: "Enter email" %>

</div>

</div>

<div class="form-group">

<div class="control-label col-sm-2">

<%= f.label :password %>

</div>

<div class="col-sm-8">

<%= f.password_field :password, class: "form-control", placeholder: "Enter password" %>

</div>

</div>

<div class="form-group">

<div class="col-sm-offset-2 col-sm-10">

<%= f.submit(@user.new_record? ? "Sign up" : "Update account", class: 'btn btn-primary btn-lg') %>

</div>

</div>

<% end %>

<div class="col-xs-4 col-xs-offset-4">

[ <%= link_to "Cancel request and return to articles listing", articles_path %> ]

</div>

</div>

</div>

회원가입에 필요한 파라메터로는 username, email, password 3가지가 있습니다. 각각의 파라메터는 Symbol 형태로 Controller에 전송됩니다. :username, :email, :password로 되어야 컨트롤러에 전송됩니다. Spring에서 name='username' 으로 작성해야 파라메터가 전송되는 것과 같은 원리입니다.




[UserController 코드]


# Sign up을 누르면 new 라우팅으로 연결되어 new.html로 연결된다.
# 하지만 @user = User.new를 왜 생성하는지 이유를 알 수 없다.
# 왜냐하면 create에서도 @user를 사용하기 때문에 사실상 필요가 없는 생성이다.
def new
@user = User.new
end

def create
@user = User.new(user_params) # UI로부터 받아온 이름, 이메일, 비밀번호를 받아서 인스턴스 생성
if @user.save # 인스턴스를 DB에 저장
flash[:success] = "Welcome to the alpha blog #{@user.username}"
redirect_to articles_path
else
render 'new' # DB 저장에 실패하여 user/new.html로 다시 리다이렉트
end

end


라우터는 다음과 같이 설정되어 있습니다.

get 'signup', to: 'users#new'
resources :users, except: [:new]

localhost:3000/signup 을 입력하면 UserController의 new 메서드로 전송됩니다. 그렇게 되면 new 메서드에서는 new.html 파일로 보내줍니다. 그리고 Sign up 폼에서 입력된 파라메터를 다시 create로 보내줍니다.


private
def user_params
params.require(:user).permit(:username, :email, :password)
end

위의 user_params 라는 메서드가 UI로부터 오는 user 파라메터를 받아옵니다. params 라는 메서드는 request에 대한 모든 파라메터를 받아오는 함수입니다. params 메서드를 살펴보면 다음과 같습니다.


def params
@_params ||= Parameters.new(request.parameters)
end

request.parameters 즉 request에서 parameters 부분을 가져와 Parameter 객체를 생성합니다.

수 많은 파라메터 중 user로 wrapping 된 파라메터를 가져오는 것이 바로 require(:user) 입니다.



회원가입 폼 - Controller를 사용하여 회원가입하는 방법에 대해 알아보았습니다.

댓글