目的
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>
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>
app/views/users/_user.html.erb
<li>
<%= gravatar_for user, size: 50 %>
.
.
.
<% end %>
<p><%= user.profile %></p>
</li>
できたので、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の理解が進むと思った。