2
2

初学者が押さえておきたいRailsの文法まとめ

Posted at

はじめに

これだけは覚えておきたいというRailsの用語や概念について自分用の備忘録としてまとめてみました。基本的なものだけを紹介しているので、より詳しく知りたいものについては適宜ご自身で調べながら読み進めて頂けると幸いです。

また、こちらはプログラミング初学者がまとめた記事となりますので間違っていることがあるかもしれません。その際はご指摘等頂けると幸いです。宜しくお願いします。

本記事の内容

Railsでよく使われる文法の解説。

対象者

Rubyの基礎文法を学んだことはあるが、Railsについては勉強したことがない初学者の方。

アプリの基本設定

生成ファイルの設定に関しては、config/application.rbに記述をする
config.generatorsブロック内に必要な設定を記述する

`code:application

application.rb
 config.generators do |g|
    g.skip_routes true
    g.assets false
    g.helper false
    g.test_framework false
 end

i18nによる日本語化対応

config/application.rb

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ファイルを作成する

  • 基本的な使い方の例
config/locales/activerecord/ja.yml
ja:
   activerecord:
     models:
       user: 'ユーザー'
     attributes:
       user:
         email: 'メールアドレス'
         password: 'パスワード'

デコレーターの導入方法

Gemfile
gem 'draper'

bundle install
rails generate draper:install
rails generate decorator ○○(モデル名)

viewファイル
 <div>
     <%= current_user.decorate.full_name %>
 </div>

viewでは.decorate.メソッドとして記述し、decorateのメソッドを呼び出す

decoratorファイル
class UserDecorator < Draper::Decorator
   delegate_all
   
   def full_name
     "#{object.first_name} + #{object.last_name}"
   end
 end

モデルではデコレーターに書く理由

  • モデルにはDBにアクセスするような処理のみを記載することで肥大化を防ぐ。
  • ビューロジックはモデルには書かない

フラッシュメッセージの設定

layouts/_flash.html.erbにファイルを用意し、それを読み込む

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に下記を追加

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   add_flash_types :success, :info, :warning, :danger
end

コントローラではrender時はflash.now、redirect_to時はそのまま続けて書く

controllers
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
いかがseedfakerを使ってダミーデータを作る例

db/seeds.rb
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で実行する

レンダリングについて

コントローラーに下記のような記述がありレンダリングする場合、

app/controllers/board_controller.rb
def index
   @boards = Board.all
end

よくある書き方としては、

app/views/index.html.erb
<% @boards.each do |board| %>
    <%= render partial: 'board', locals: { board: board } %>
<% end %>

ただ、これだと@bordsの数だけレンダリングするのでパフォーマンスが悪い
そこで、

app/views/index.html.erb
 <%= render partial: "board", collection: @boards %>

とすることでパフォーマンスが良くなる
さらに、

erbファイル
 <%= render @boards %>

として省略できる
renderlocalsオプションをしようしたときは、partialをつけないとエラーになる

<%= render partial: 'ファイル名', locals: { '部分テンプレート内で使う変数': '変数に入れる値' } %>
<!-- 例 テンプレート内の「hoge」という変数に「こんにちは」が代入される -->
<%= render partial: 'hoge', locals: { hoge: 'こんにちは' } %>
<!--  テンプレート内の「hoge」という変数に呼び出し元で定義した変数「hoge」が代入される-->
<%= render partial: 'hoge', locals: { hoge: hoge } %>

参考:https://pikawaka.com/rails/partial_template

2
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
2
2