LoginSignup
5
3

More than 1 year has passed since last update.

Rails 6のDeviseのフォームをBootstrap4 + RailsLayoutでカッコ良くしたい

Last updated at Posted at 2020-01-01

はじめに

以前、DeviseのフォームをBootstrap4 + RailsLayoutでカッコ良くしたいという記事を書いたが、あの当時はRailsLayoutはBootstrap4未対応だった。しかし、バージョン 2.3.1では対応しているので、Rails 6環境で検証してみた。

環境
- Rails 6.0.2.1
- Ruby 2.5.3
- rails_layout 2.3.1

1. devise環境の準備

私の記事「Devise4.7をRails6で動かす」の1と2を実行して基本的に動く状態のdevise環境を構築しておく。

2. RailsLayout Gemのインストールとセットアップ

rails_layout のREADMEの中程にあるInstall the RailsLayout Gemの手順に従ってインストールする。

(1) Gemfileに追記してbundle install

Gemfile
# Bootstrap
gem 'bootstrap', '~>4.0.0'
gem 'jquery-rails'
gem 'sprockets-rails', '>= 2.3.2'

# RailsLayout
group :development do
  gem 'rails_layout'
end
bundle_install
$ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Using rake 13.0.1
Using concurrent-ruby 1.1.5
Using i18n 1.7.0

長いので省略

Bundle complete! 21 Gemfile dependencies, 81 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

Process finished with exit code 0

(2) The “layout:install” Command

Bootstrap4用のrails generate layout:install bootstrap4コマンドを実行してApplication レイアウト, Navigation, Flash メッセージファイルを生成する。

$ rails generate layout:install bootstrap4
Running via Spring preloader in process 69109
      remove  app/assets/stylesheets/application.css
      create  app/assets/stylesheets/application.css.scss
      create  app/assets/stylesheets/1st_load_framework.css.scss
      create  app/assets/javascripts/application.js
      remove  app/assets/stylesheets/simple.css
      remove  app/assets/stylesheets/foundation_and_overrides.css.scss
      append  app/assets/stylesheets/1st_load_framework.css.scss
      remove  app/views/layouts/application.html.erb
      create  app/views/layouts/application.html.erb
      create  app/views/layouts/_messages.html.erb
      create  app/views/layouts/_navigation.html.erb
      create  app/views/layouts/_navigation_links.html.erb

以下のファイルが生成される。

app/views/layouts/application.html.erb
app/views/layouts/_messages.html.erb
app/views/layouts/_navigation.html.erb
app/views/layouts/_navigation_links.html.erb

ここで試しにRailsを起動したらエラーになった。

ActionView::Template::Error (Asset `application.js` was not declared to be precompiled in production.
Declare links to your assets in `app/assets/config/manifest.js`.

  //= link application.js

メッセージの通りにapp/assets/config/manifest.jsを修正。

app/assets/config/manifest.js
//= link_tree ../images
//= link_directory ../stylesheets .css
//= link application.js <=これを追加

(3) Navigationファイルに各種リンク追加

$ rails generate layout:navigation bootstrap4
Running via Spring preloader in process 70208
   identical  app/views/layouts/_navigation_links.html.erb
      create  app/views/layouts/_nav_links_for_auth.html.erb
        gsub  app/views/layouts/_navigation.html.erb

(4) Devise Viewsを再生成

GemのREADMEには書いてないがrails generate layout:devise bootstrap4が動くようなので実行。

$ rails generate layout:devise bootstrap4
Running via Spring preloader in process 70341
    conflict  app/views/devise/sessions/new.html.erb
Overwrite /Users/your home/devise-rails6/app/views/devise/sessions/new.html.erb? (enter "h" for help) [Ynaqdhm] Y
       force  app/views/devise/sessions/new.html.erb
    conflict  app/views/devise/passwords/new.html.erb
Overwrite /Users/your home/devise-rails6/app/views/devise/passwords/new.html.erb? (enter "h" for help) [Ynaqdhm] Y
       force  app/views/devise/passwords/new.html.erb
    conflict  app/views/devise/passwords/edit.html.erb
Overwrite /Users/your home/devise-rails6/app/views/devise/passwords/edit.html.erb? (enter "h" for help) [Ynaqdhm] Y
       force  app/views/devise/passwords/edit.html.erb
    conflict  app/views/devise/registrations/edit.html.erb
Overwrite /Users/your home/devise-rails6/app/views/devise/registrations/edit.html.erb? (enter "h" for help) [Ynaqdhm] Y
       force  app/views/devise/registrations/edit.html.erb

(5) 動作確認

やることはこれだけなので、ここでブラウザで確認してみたら、何か出てるが真っ白だった。これは以前書いた記事DeviseのフォームをBootstrap4 + RailsLayoutでカッコ良くしたいの時と同じである。

スクリーンショット 2020-01-01 午前0.11.05.png

3. 真っ白画面の修正

見た目だけの問題と思うので、app/views/layouts/application.html.erbをチェックし、ここから呼び出されるlayouts/navigationを見ると、背景色として<nav class="navbar navbar-dark bg-inverse">bg-inverseを指定しているが、参考記事によればBootstrap4はbg-inverse持っていない。従って、全体背景色の白が出ているだけであった。そこで、bg-darkにしてみたらちゃんと表示された。

app/views/layouts/_navigation.html.erb
<%# navigation styled for Bootstrap 4.0 %>
<div class="container">
  <nav class="navbar navbar-dark bg-dark"> <=ここを修正
    <ul class="nav navbar-nav clearfix">
      <li class="nav-item">
        <button class="navbar-toggler hidden-sm-up nav-link" type="button" data-toggle="collapse" data-target="#exCollapsingNavbar2" aria-controls="exCollapsingNavbar2" aria-expanded="false" aria-label="Toggle navigation">
          &#9776;
        </button>
      </li>
    </ul>
    <div class="collapse navbar-toggleable-xs" id="exCollapsingNavbar2">
      <%= link_to "Rails bootstrap", root_path, class: 'navbar-brand' %>
      <ul class="nav navbar-nav">
        <%= render 'layouts/navigation_links' %>
        <%= render 'layouts/nav_links_for_auth' %>
      </ul>
    </div>
  </nav>
</div>

スクリーンショット 2020-01-01 午前0.26.15.png

Sign upをクリックするとサインアップ画面もRailsLayoutによって置き換えられていた。

スクリーンショット 2020-01-01 午前0.26.55.png

これでBootstrap4 + RailsLayoutでカッコ良くなった。

ここから先はCSSなりViewなりを満足するまでゴリゴリやって下さい。下記のexamplesが参考になります。

Navbar examples

関連記事

Devise4.7をRails6で動かす
DeviseのフォームをBootstrap4 + RailsLayoutでカッコ良くしたい

参考記事

Bootstrap 4, bg-inverse not showing?
Navbar examples

5
3
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
5
3