はじめに
これだけは覚えておきたいというRailsの用語や概念について自分用の備忘録としてまとめてみました。基本的なものだけを紹介しているので、より詳しく知りたいものについては適宜ご自身で調べながら読み進めて頂けると幸いです。
また、こちらはプログラミング初学者がまとめた記事となりますので間違っていることがあるかもしれません。その際はご指摘等頂けると幸いです。宜しくお願いします。
本記事の内容
Railsでよく使われる文法の解説。
対象者
Rubyの基礎文法を学んだことはあるが、Railsについては勉強したことがない初学者の方。
アプリの基本設定
生成ファイルの設定に関しては、config/application.rb
に記述をする
config.generators
ブロック内に必要な設定を記述する
`code:application
config.generators do |g|
g.skip_routes true
g.assets false
g.helper false
g.test_framework false
end
- 参考:Railsガイド
i18nによる日本語化対応
config/application.rb
に
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
config/locales/activerecord/ja.yml
config/locales/views/ja.yml
の2ファイルを作成する
- 基本的な使い方の例
ja:
activerecord:
models:
user: 'ユーザー'
attributes:
user:
email: 'メールアドレス'
password: 'パスワード'
デコレーターの導入方法
gem 'draper'
bundle install
rails generate draper:install
rails generate decorator ○○(モデル名)
<div>
<%= current_user.decorate.full_name %>
</div>
viewでは.decorate.メソッド
として記述し、decorate
のメソッドを呼び出す
class UserDecorator < Draper::Decorator
delegate_all
def full_name
"#{object.first_name} + #{object.last_name}"
end
end
モデルではデコレーターに書く理由
- モデルにはDBにアクセスするような処理のみを記載することで肥大化を防ぐ。
- ビューロジックはモデルには書かない
フラッシュメッセージの設定
layouts/_flash.html.erb
にファイルを用意し、それを読み込む
<% flash.each do |key, value| %>
<p class="alert alert-<%= key %>">
<%= value %>
</p>
<% end %>
次にapp/views/layouts/application.html.erb
レイアウトファイルでパーシャルを読み込む
<%= render 'shared/flash_message' %>
<%= yield %>
app/controllers/application_controller.rb
に下記を追加
class ApplicationController < ActionController::Base
add_flash_types :success, :info, :warning, :danger
end
コントローラではrender時はflash.now、redirect_to時はそのまま続けて書く
redirect_to login_path, success: "ユーザー登録が完了しました"
flash.now[:danger] = "ユーザー登録に失敗しました"
redirect_to/renderの違い
- redirect_toはredirect先のviewを読み込む前にviewに対応するアクションを通す
- renderはviewに対応するアクションを通さない
両者の違いは、処理がもう一度コントローラーを通過するかしないか
アソシエーション
アソシエーションの定義例
bundle exec rails g model board user:references
references型
を用いることで、
インデックスをはる
外部キー制約
などを実現できる
bundle exec rake db:migrate:status
で現在のマイグレーション状態を確認
(バリデーションの例)
validates :title, presence: true, length: {maximum: 255}
シードファイル
db/seeds.rb
に初期データを投入し、rails db:seed
で実行
ダミーデータを作る際に使われるのがFaker
というgem
いかがseed
とfaker
を使ってダミーデータを作る例
10.times do
User.create(
first_name: Faker::Name.first_name,
last_name: Faker::Name.last_name,
email: Faker::Internet.email,
password: '12345678',
password_confirmation: '12345678'
)
end
20.times do |index|
Board.create(
user: User.offset(rand(User.count)).first,
title: "タイトル#{index}",
body: "本文#{index}"
)
end
bundle exec rails db:seed
で実行する
レンダリングについて
コントローラーに下記のような記述がありレンダリングする場合、
def index
@boards = Board.all
end
よくある書き方としては、
<% @boards.each do |board| %>
<%= render partial: 'board', locals: { board: board } %>
<% end %>
ただ、これだと@bords
の数だけレンダリングするのでパフォーマンスが悪い
そこで、
<%= render partial: "board", collection: @boards %>
とすることでパフォーマンスが良くなる
さらに、
<%= render @boards %>
として省略できる
render
でlocalsオプション
をしようしたときは、partial
をつけないとエラーになる
<%= render partial: 'ファイル名', locals: { '部分テンプレート内で使う変数': '変数に入れる値' } %>
<!-- 例 テンプレート内の「hoge」という変数に「こんにちは」が代入される -->
<%= render partial: 'hoge', locals: { hoge: 'こんにちは' } %>
<!-- 例 テンプレート内の「hoge」という変数に呼び出し元で定義した変数「hoge」が代入される-->
<%= render partial: 'hoge', locals: { hoge: hoge } %>
参考:https://pikawaka.com/rails/partial_template
- 参考サイト