RubyOnRails 3) Devise 기본
Devise는 User 모델을 손쉽게 만들고 사용할 수 있는 젬이다.
먼저, 젬파일에서 다음의 코드를 기입후 설치해준다.
1 2 3 4 5 | \project\Gemfile gem 'devise' $ bundle | cs |
그리고 다음의 터미널 명령어를 통해 devise를 설치하고 User 모델을 만든다.
1 2 | $ rails g devise:install $ rails g devise:views (뷰파일 수정할 수 있도록) $ rails g devise User | cs |
그리고 기존의 Post와 Reply 모델에 user_id Column을 추가할 수 있도록 한다.
1 2 3 | $ rails g migration add_userid_to_posts user_id:integer $ rails g migration add_userid_to_replies user_id:integer $ rails db:migrate | cs |
다음, congif/ initializers/ devise.rb 에서 signed_out delete메소드를 get으로 변경한다.
그리고, reply와 마찬가지로 post와 reply 들과 user의 관계를 설정해준다.(belongs_to:user)
그리고, Devise의 Column에 원하는 값들을 추가해주기.
1 2 3 | \db\migrate\20181226122057_devise_create_users.rb 의 migrate 파일에 가서 해당 코드 추가 t.string :username, null: false, default: "" | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | \app\controllers\application_controller.rb 에 가서 원하는 값 추가 class ApplicationController < ActionController::Base #protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) devise_parameter_sanitizer.permit(:account_update, keys: [:username]) end end \app\views\devise\registrations\new.html.erb 에 가서 원하는 값 추가 <div class="field"> <%= f.label :username %><br /> <%= f.text_field :username, autofocus: true, autocomplete: "off" %> </div> | cs |
다음, 각 Controller에 가서 회원을 확인해준다.
1 2 3 4 5 | \app\controllers\posts_controller.rb before_action :authenticate_user!, except: [:index, :show] \app\controllers\replies_controller.rb before_action :authenticate_user! | cs |
마지막으로, 추가된 user를 활용하기 위해 controller와 view 파일들을 수정해준다.
Controller 수정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | \app\controllers\posts_controller.rb def create @post = Post.new @post.title = params[:title] @post.content = params[:content] @post.user_id = params[:user_id] @post.save redirect_to "/posts/index" end def update @post = Post.find(params[:id]) # 해당 Post 객체 찾기 # 같을 경우에만 수정 if current_user.id == @post.user_id @post.title = params[:title] @post.content = params[:content] @post.save redirect_to "/posts/show/#{@post.id}" else redirect_to "/posts/show/#{@post.id}" end end def destroy @post = Post.find(params[:id]) # 해당 Post 객체 찾기 # 같을 경우에만 삭제 if current_user.id == @post.user_id @post.destroy redirect_to "/posts/index" else redirect_to "/posts/index" end end \app\controllers\replies_controller.rb def create @reply = Reply.new @reply.content = params[:content] @reply.post_id = params[:post_id] @reply.user_id = params[:user_id] @reply.save redirect_to :back end def destroy @reply = Reply.find(params[:id]) if current_user.id == @reply.user_id @reply.destroy redirect_to :back else redirect_to :back end end | cs |
View 파일 수정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | \app\views\posts\new.html.erb 에서 추가 <input type="hidden" name="user_id" value=<%=current_user.id%>></input> \app\views\posts\show.html.erb 에서 댓글 부분에 추가 <input type="hidden" name="user_id" value=<%= current_user.id %> ></input> navbar에 해당 내용 추가 <% if user_signed_in? %> <div><%= current_user.email %>님</div> <a href="/users/sign_out">로그아웃</a> <% else %> <a href="/users/sign_in">로그인</a> <% end %> | cs |
그 외에 작성자 이름을 보여주고 싶은 부분에다가 내용을 편집한다.
'Archived(Programming) > Ruby on Rails(기초)' 카테고리의 다른 글
RubyOnRails 5) Like 좋아요 기능 (0) | 2018.12.28 |
---|---|
RubyOnRails 4) Search 검색하기 (0) | 2018.12.27 |
RubyOnRails 2) Model 관계 설정 (0) | 2018.12.26 |
RubyOnRails 1) CRUD 기본 (0) | 2018.12.24 |
RubyOnRails Excel file 파싱하기(xlsx 파일) (0) | 2018.11.17 |