4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails Tutorial に自己紹介文の機能拡張をしてみた

Posted at

目的

 Rails Tutorialに自己紹介文の機能を追加する。
 テストは今回書いてないデス。

実装

 まずはブランチをきる。

$ git checkout -b user-profile

 Userモデルにprofile属性を追加する。
 Micropostの時と同じようにデータはtext型にする。

$ rails g migration add_profile_to_users profile:text

 あとで、検索機能を追加することを想定して、インデックスを追加。

db/migrate/timestanp_add_profile_to_users.rb

class AddProfileToUsers < ActiveRecord::Migration[5.1]
  def change
    add_column :users, :profile, :text
    add_index :users, :profile
  end
end

 自己紹介文の文字数を160文字以内に制限する。

app/models/user.rb
class User < ApplicationRecord
  .
  .
  .   
  validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
  validates :profile, presence: true, length: { maximum: 160 }
  .
  .
  . 
end

 Faker::Cat.breedを使って、自己紹介文にどの猫の種類が好きか追加する。

db/seed.rb
User.create!(name:  "Example User",
  .
  .
  .
             activated_at: Time.zone.now,
             profile: "I like black cat.")

99.times do |n|
  name  = Faker::Name.name
  email = "example-#{n+1}@railstutorial.org"
  password = "password"
  profile = "I like " + Faker::Cat.breed + "." 
  .
  .
  .
              activated_at: Time.zone.now,
              profile: profile)
  .
  .
  .
followers.each { |follower| follower.follow(user) }

 データベースをリセットして、いろんなユーザー生成する。

$ rails db:migrate:reset
$ rails db:seed

 Profile画面に自己紹介文を表示させる。

app/views/users/show.html.erb
<% provide(:title, @user.name) %>
  .
  .
  .   
    </section>
    <p><%= @user.profile %></p>
    <section class="stats">
  .
  .
  . 
</div>  
スクリーンショット 2018-08-27 23.53.37.png

 profileの属性を許可する。

app/controllers/users_controller.rb
class UsersController < ApplicationController
  .
  .
  .
  private
  
    def user_params
      params.require(:user).permit(:name, :email, :password,
                                  :password_confirmation, :profile) 
    end
  .
  .
  .
end

 Settingsで自己紹介文を編集できるようにする。

app/views/users/edit.html.erb
<% provide(:title, "Edit user") %>
  .
  .
  .     
      <%= f.email_field :email, class: 'form-control' %>

      <%= f.label :profile %>
      <%= f.text_area :profile,  class: 'form-control', placeholder: "160文字以内で入力" %> 
  .
  .
  .
</div>
スクリーンショット 2018-08-27 14.25.02.png  ユーザー一覧ページで自己紹介文を表示するようにする。
app/views/users/_user.html.erb
<li>
  <%= gravatar_for user, size: 50 %>
  .
  .
  .
  <% end %>
  <p><%= user.profile %></p> 
</li>
スクリーンショット 2018-08-27 23.53.47.png

 できたので、push。

$ git add -A
$ git commit -m "Add user's profile"
$ git checkout master
$ git merge user-profile
$ git push

herokuにもpush。以上で終わりデス。

$ git push heroku
$ heroku pg:reset DATABASE
$ heroku run rake db:migrate
$ heroku run rake db:seed
$ heroku restart

感想

 Rails Tutorialを一通りやって、初めて機能追加をやった。
 今回、ちょっとした機能追加だったが、form_forやvalidatesなどRailsについてのいい復習になり、勉強になった。
 写経だけでなく、自分の頭で考えて機能追加をすると、よりRailsの理解が進むと思った。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?