#author("2020-04-17T03:14:55+00:00","default:wikiwriter","wikiwriter")
&tag(Rails/Bootstrap/古い情報);
*目次 [#w501eb72]
#contents
*関連ページ [#f18fb14a]
*参考情報 [#kc2fe30a]


*bootstrap-sassを使って導入(Rails 5編) [#zb69e31e]

**Gemfileの編集 [#e4051c96]
-[[GitHub - twbs/bootstrap-sass: Official Sass port of Bootstrap 2 and 3.:https://github.com/twbs/bootstrap-sass]]…公式サイトの指示に従い以下をGemfileに追加する
-ついでにfont-awesomeも。
#pre{{
gem 'bootstrap-sass', '~> 3.3.6'
gem 'font-awesome-sass'
}}

**bundle installを実行 [#r93ee318]
-bundle installを実行
#pre{{
bundle install --path vendor/bundle
}}

**application.css.scss作成など [#z2dc2fed]
-application.css.scssを作成。
#pre{{
@import "bootstrap-sprockets";
@import "bootstrap";
@import "font-awesome-sprockets";
@import "font-awesome";
}}

-app/assets/stylesheets/application.cssは削除
-app/assets/javascripts/application.jsの編集
#pre{{
//= require bootstrap-sprockets
}}

*bootstrap-sassを使って導入(Rails 4編) [#a5457844]
-[[GitHub - twbs/bootstrap-sass: Official Sass port of Bootstrap 2 and 3.:https://github.com/twbs/bootstrap-sass]]…公式サイト
-Rails4にBootstrap3を入れる場合、bootstrap-sassというのを使ったほうがいいらしい。
-[[bootstrap-sass という gem について - willnet.in:http://www.willnet.in/136]]
-[[Rails4 に bootstrap-sass で Twitter Bootstrap3 を導入 | EasyRamble:http://easyramble.com/bootstrap-sass-on-rails4.html]]
-[[Rails 4 で Twitter Bootstrap と Font Awesome を利用する手順 - Qiita:http://qiita.com/hkusu/items/a549a96dcb2bb935a47b]]

**Gemfileの編集 [#q9863aaa]
-Gemfileに追加。
#pre{{
gem 'bootstrap-sass', '~> 3.3.6'
gem 'font-awesome-sass'
}}

**bundle install実行 [#ncbd9634]
-bundle installを実行
 bundle install --path vendor/bundle

**application.css.scss作成など [#xda4204a]
-app/assets/stylesheets/application.css.scssを作成
#pre{{
@import "bootstrap-sprockets";
@import "bootstrap";
@import "font-awesome-sprockets";
@import "font-awesome";
}}
- app/assets/stylesheets/application.cssは削除
-app/assets/javascripts/application.jsの編集
#pre{{
//= require bootstrap-sprockets
}}

**動作確認 [#nc1012ae]
-scaffoldを作ってみる

***scaffold実行 [#p5e838f6]
-bookモデルのscaffoldを作成
 bundle exec rails g scaffold  book title:string author:string summary:text
 bundle exec rake db:migrate
-ここで一旦 http://localhost:3000/books にアクセスして確認。
-app/views/layouts/application.html.erbを編集。ナビゲーションの追加とyieldの囲みが必要。
#pre{{
<nav class="navbar navbar-default" role="navigation">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="/"><i class="fa fa-home"></i>Home</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="http://www.google.com/" target="_blank">Google</a></li>
                <li><a href="http://www.yahoo.co.jp/" target="_blank">Yahoo! Japan</a></li>
            </ul>
            <ul class="nav navbar-nav navbar-left">
                <div class="form-group">
                    <%= form_tag('/books', method: 'get', class: 'navbar-form navbar-right') do %>
                        <%= text_field_tag(:q, params[:q], class: 'form-control', style: 'width: 200px;', placeholder: 'Search') %>
                    <% end %>
                </div>
            </ul>
        </div>
    </div><!-- /.container-fluid -->
</nav>

<div class="container">
    <!-- flash messages -->
    <%= yield %>
    <hr>
    <footer>
        <p>&#169; src256</p>
    </footer>
</div>
}}
-もう一回 http://localhost:3000/books にアクセス。
*Bootstrap3対応フォーム [#s090fa47]

**フォームの生成 [#o77012ff]

-以下のようなフォームを作成する。
#ref(newbook.png)
-books/_form.html.erbの内容
#pre{{
<%= form_for(@book, html: {class: 'form-horizontal'}) do |f| %>
    <% if @book.errors.any? %>
        <div id="error_explanation">
            <h2>エラーが発生しました :</h2>
            <ul>
                <% @book.errors.full_messages.each do |msg| %>
                    <li><%= msg %></li>
                <% end %>
            </ul>
        </div>
    <% end %>

    <div class="form-group">
        <%= f.label(:title, 'タイトル', class: 'col-xs-2 control-label') %>
        <div class="col-xs-10">
            <%= f.text_field(:title, class: 'form-control') %>
        </div>
    </div>

    <div class="form-group">
        <%= f.label(:author, '著者', class: 'col-xs-2 control-label') %>
        <div class="col-xs-10">
            <%= f.text_field(:author, class: 'form-control') %>
        </div>
    </div>

    <div class="form-group">
        <%= f.label(:summary, '概要', class: 'col-xs-2 control-label') %>
        <div class="col-xs-10">
            <%= f.text_area(:summary, rows: 14, cols: 20, class: 'form-control') %>
        </div>
    </div>

    <div class="form-group">
        <div class="col-xs-12">
            <%= f.submit('保存', class: 'btn btn-primary') %>
        </div>
    </div>
<% end %>

}}

**エラーメッセージの見せ方 [#qc95f2dd]
#ref(error.png)
-フォームの中にエラーを一覧表示し、さらにエラーに成ったフィールドを.field_with_errorsでハイライトするのが普通らしい。
-application.css.scssの修正。本来は最初のブロックでいいはずだが、form-horizontalを使う場合下の修正も必要(ずれる)。
#pre{{
.field_with_errors {
  @extend .form-group;
  @extend .has-error;
}

.form-horizontal .field_with_errors {
  margin: 0;
}

.form-horizontal .field_with_errors:before, .form-horizontal .field_with_errors::after {
  display: block;
  clear: none;
}

}}
-ビューの修正。alert-dangerにバツじるしをつけて閉じられるようにする場合。
#pre{{
    <% if @item.errors.any? %>
        <div class="alert alert-danger" role="alert">
            <button class="close" data-dismiss="alert">×</button>
            <h2>エラーが発生しました :</h2>
            <ul>
                <% @item.errors.full_messages.each do |msg| %>
                    <li><%= msg %></li>
                <% end %>
            </ul>
        </div>
    <% end %>

}}

**メッセージの表示 [#q308d4ea]
-画面上部に×印で閉じることが出来るメッセージを表示したい場合(フォーム以外でも表示するためにレイアウトファイルに追加する)。

***application.css.scssに追加 [#w3a79c6b]
#pre{{
field_with_errors {
  @extend .form-group;
  @extend .has-error;
}

.form-horizontal .field_with_errors {
  margin: 0;
}

.form-horizontal .field_with_errors:before, .form-horizontal .field_with_errors::after {
  display: block;
  clear: none;
}

}}

***application.html.erbの編集 [#w4e6e487]
#pre{{

<div class="container">
  <!-- flash messages -->
  <div class="row">
    <div class="col-xs-12">
      <%= flash_messages %>
    </div>
  </div>
  <div class="row">
    <%= yield %>
  </div>
  <hr>
  <footer>
    <p>&#169; src256</p>
  </footer>
</div>
}}

***application_helper.rbに追加 [#da2b191c]
#pre{{
module ApplicationHelper
  def bootstrap_class_for flash_type
    { success: "alert-success", error: "alert-danger", alert: "alert-warning", notice: "alert-info"\
 }[flash_type.to_sym] || flash_type.to_s
  end

  def flash_messages(opts = {})
    flash.each do |msg_type, message|
      concat(content_tag(:div, message, class: "alert #{bootstrap_class_for(msg_type)} alert-dismis\
sible", role: 'alert') do
        concat(content_tag(:button, class: 'close', data: { dismiss: 'alert' }) do
          concat content_tag(:span, '&times;'.html_safe, 'aria-hidden' => true)
          concat content_tag(:span, 'Close', class: 'sr-only')
        end)
        concat message
      end)
    end
    nil
  end
end

}}
***呼び出し例 [#i75b4eee]
-books_controller.rbで表示する場合
#pre{{
  def index
    @books = Book.all
    flash[:notice] = 'はじめまして'
  end
}}



トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS