annotateでschemeをmodelに書き出す
Gemfile
group :development do gem 'annotate' end
bundle install
使い方
bundle exec annotate
テーブルの情報がコメントで記載されます
# == Schema Information # # Table name: areas # # id :bigint(8) not null, primary key # name :string not null # description :string # created_at :datetime not null # updated_at :datetime not null # prefecture_id :integer # class Area < ApplicationRecord # ------------------------------------------------------------------------------- # Relations # ------------------------------------------------------------------------------- extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :prefecture # ------------------------------------------------------------------------------- # Validations # ------------------------------------------------------------------------------- validates :name, presence: true end
【Rails】モデルに都道府県情報を持たせる
今回はacrive__hashを利用して、Area Model に都道府県情報を付与します。
install
# A readonly ActiveRecord-esque base class that lets you use a hash, a Yaml file or a custom file as the datasource. Read more: https://github.com/zilkey/active_hash gem 'active_hash'
bundle install
touch app/models/prefecture.rb
class Prefecture < ActiveHash::Base fields :name, :name_en create id: 0, name: '未設定', name_en: 'not set' create id: 1, name: '北海道', name_en: 'hokkaido' create id: 2, name: '青森県', name_en: 'aomori' create id: 3, name: '岩手県', name_en: 'iwate' create id: 4, name: '宮城県', name_en: 'miyagi' create id: 5, name: '秋田県', name_en: 'akita' create id: 6, name: '山形県', name_en: 'yamagata' create id: 7, name: '福島県', name_en: 'fukushima' create id: 8, name: '茨城県', name_en: 'ibaraki' create id: 9, name: '栃木県', name_en: 'tochigi' create id: 10, name: '群馬県', name_en: 'gumma' create id: 11, name: '埼玉県', name_en: 'saitama' create id: 12, name: '千葉県', name_en: 'chiba' create id: 13, name: '東京都', name_en: 'tokyo' create id: 14, name: '神奈川県', name_en: 'kanagawa' create id: 15, name: '新潟県', name_en: 'niigata' create id: 16, name: '富山県', name_en: 'toyama' create id: 17, name: '石川県', name_en: 'ishikawa' create id: 18, name: '福井県', name_en: 'fukui' create id: 19, name: '山梨県', name_en: 'yamanashi' create id: 20, name: '長野県', name_en: 'nagano' create id: 21, name: '岐阜県', name_en: 'gifu' create id: 22, name: '静岡県', name_en: 'shizuoka' create id: 23, name: '愛知県', name_en: 'aichi' create id: 24, name: '三重県', name_en: 'mie' create id: 25, name: '滋賀県', name_en: 'shiga' create id: 26, name: '京都府', name_en: 'kyoto' create id: 27, name: '大阪府', name_en: 'osaka' create id: 28, name: '兵庫県', name_en: 'hyogo' create id: 29, name: '奈良県', name_en: 'nara' create id: 30, name: '和歌山県', name_en: 'wakayama' create id: 31, name: '鳥取県', name_en: 'tottori' create id: 32, name: '島根県', name_en: 'shimane' create id: 33, name: '岡山県', name_en: 'okayama' create id: 34, name: '広島県', name_en: 'hiroshima' create id: 35, name: '山口県', name_en: 'yamaguchi' create id: 36, name: '徳島県', name_en: 'tokushima' create id: 37, name: '香川県', name_en: 'kagawa' create id: 38, name: '愛媛県', name_en: 'ehime' create id: 39, name: '高知県', name_en: 'kochi' create id: 40, name: '福岡県', name_en: 'fukuoka' create id: 41, name: '佐賀県', name_en: 'saga' create id: 42, name: '長崎県', name_en: 'nagasaki' create id: 43, name: '熊本県', name_en: 'kumamoto' create id: 44, name: '大分県', name_en: 'oita' create id: 45, name: '宮崎県', name_en: 'miyazaki' create id: 46, name: '鹿児島県', name_en: 'kagoshima' create id: 47, name: '沖縄県', name_en: 'okinawa' end
都道府県データ参考: http://www.kokudo.or.jp/master/001.html
エリアに都道府県を持たせる
エリアにカラムを追加
bundle exec rails generate migration AddPrefectureIdToAreas prefecture_id:string bundle exec rails db:migrate
ストロングパラメーターに追加
app/controllers/areas_controller.rb
# Never trust parameters from the scary internet, only allow the white list through. def area_params params.require(:area).permit(:name, :description, :prefecture_id) end
エリアは都道府県に属する
app/models/area.rb
class Area < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :prefecture end
View
app/views/areas/_form.html.slim
.field = f.label :prefecture_id = f.collection_select :prefecture_id, Prefecture.all, :id, :name
app/views/areas/show.html.slim
p strong Prefecture: = @area.prefecture.name
デバック用のgemをrails アプリに追加する
Better Errors
標準のRailsエラーページを遥かに優れたエラーページに置き換えます。 github.com
Binding of caller
Better Errors のエラー画面でirbを利用できるようになる。 github.com
Pry byebug
段階的なデバッグ機能とスタックナビゲーション機能を追加します。 github.com
Pry rails
Pryはirbの代替となるパワフルな対話ツール。ドキュメントが見れる。シンタックスハイライト。 github.com
hirb
irbのレコードの出力を整形する github.com
hirb unicode
hirbのUnicode Support github.com
pry-doc
pryのドキュメントをサポート github.com
view_source_map
パーシャルのパス情報をHTMLコメントとして出力 github.com
設定
Gemfile
group :development do # Better error page for Rack apps. Read more: https://github.com/BetterErrors/better_errors gem 'better_errors' # Retrieve the binding of a method's caller in MRI 1.9.2+. Read more: https://github.com/banister/binding_of_caller gem 'binding_of_caller' # Step-by-step debugging and stack navigation in Pry. Read more: https://github.com/deivid-rodriguez/pry-byebug gem 'pry-byebug' # Rails >= 3 pry initializer. Read more: https://github.com/rweng/pry-rails gem 'pry-rails' # A mini view framework for console/irb that's easy to use, even while under its influence. Read more: https://github.com/cldwalker/hirb gem 'hirb' # Unicode support for hirb. Read more: https://github.com/miaout17/hirb-unicode gem 'hirb-unicode' # Provide MRI Core documentation and source code for the Pry REPL. Read more: https://github.com/pry/pry-doc gem 'pry-doc' # Rails plugin to view source map. Read more: https://github.com/r7kamura/view_source_map gem "view_source_map" end
Gem をInstall
bundle install
rails scaffold コマンドでモデルを作成する
今回はエリアモデルを作成します。
bin/rails generate scaffold Area name:string description:string
https://railsguides.jp/command_line.html#rails-generate
nameは必須にします。
class CreateAreas < ActiveRecord::Migration[6.0] def change create_table :areas do |t| t.string :name, null: false t.string :description t.timestamps end end end
モデルでもバリデーションを記述します app/models/area.rb
class Area < ApplicationRecord # -------------------------------------------------- # Validations # -------------------------------------------------- validates :name, presence: true end
https://railsguides.jp/active_record_validations.html
Migration
bin/rails db:migrate
Rails アプリのテンプレートエンジンをSlimに変更する
Gemfile
gem 'slim-rails' gem 'html2slim'
gem をInstall
bundle install --path vendor/bundle --jobs=4
erbをslimに変換
bundle exec erb2slim app/views/layouts/ --delete
最新のRuby on Rails でアプリを作成
rails のInstall
bundle init
rails のgemを追加
# Gemfile + gem 'rails', github: 'rails/rails'
rails をInstall
bundle install --path vendor/bundle --jobs=4
rails のバージョンを確認
bundle exec rails -v Rails 6.0.0.beta3
新アプリの作成
bundle exec rails new . -d postgresql --skip-turbolinks --skip-test
DBの作成
bundle exec rails db:create
開発用サーバの起動
bundle exec rails s
ブラウザからアクセス
http://localhost:3000/
終わり
ざっくりHaml
Haml (HTML Abstraction Markup Lunguage)
概要
- HTML template engin
- HTMLをスッキリ美しく
- 公式サイト: http://haml.info/
- リファレンス: http://haml.info/docs/yardoc/file.REFERENCE.html
コツ
- h1, tableなどは開始タグと閉じタグを削除し、%をタグにつける。
- id属性、class属性、その他の属性を追加する場合は、{}でハッシュ形式
- ifやeachなどロジック部分の行には、先頭に-
- インデントに気をつける
準備
作業用ディレクトリの作成
$ mkdir haml_lesson; and cd haml_lesson $ code .
Rubyのバージョンを指定
$ rbenv local 2.5.1 $ ruby -v ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
hamlのインストール
$ sudo gem update --system $ gem install haml $ gem list | grep haml haml (5.0.4)
変換
大まかな流れとして、hamlファイルをhamlに通すとhtmlが出来上がる。
$ string trim ' !!! %haml %body hello world! '> index.haml
htmlに変換
$ haml -q index.haml index.html # -q : シングルクォーテーションではなくダブルクオテーションを使用する
確認
$ less index.html
基本
- !!! → <!DOCTYPE html>
- % → 開始タグと終了タグ
属性
htmlっぽく書いたり,htmlっぽく書いたりできる
%p(class="test") hello world or %p{class: "test"} hello world ↓ <p class='test'>hello world</p>
他にもさまざまな書き方ができる
%div{id: "main", class: "test"} %div(id="main" class="test") %div#main.test #main.test ↓ <div class='test' id='main'></div>
コメント
/ end body ↓ <!-- end body --> / コメント コメント コメント ↓ <!-- コメント コメント コメント -->
hamlファイルのみのコメント
-# コメント
改行
%p hello ↓ <p>hello</p>
%p hello ↓ <p> hello </p>
%p< hello ↓ <p>hello</p>
Filter
:css .myStyle { color: red; } ↓ <style> .myStyle { color: red; } </style>
:javascript alert(1); if (1) { alert(2); } ↓ <script> alert(1); if (1) { alert(2); } </script>
%div :escaped <html> </html> ↓ <div> <html> </html> </div>
Rubyの評価
%p total is #{3 + 9} ↓ <p>total is 12</p>
%p= Time.now ↓ <p>2018-10-05 10:42:56 +0900</p>
- x = 10 %p= x ↓ <p>10</p>
- (1..10).each do |i| %p{id: "item_#{i}"} #{i} ↓ <p id='item_1'>1</p> <p id='item_2'>2</p> <p id='item_3'>3</p> <p id='item_4'>4</p> <p id='item_5'>5</p> <p id='item_6'>6</p> <p id='item_7'>7</p> <p id='item_8'>8</p> <p id='item_9'>9</p> <p id='item_10'>10</p>