Ruby on Rails

bundle install でHTTPError

Fetching source index from https://rubygems.org/
Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/
Retrying fetcher due to error (3/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/^C
  • gem update --system で無事解決した.

はじめての

$ rbenv -v
rbenv 1.1.1

$ rbenv install --list
$ rbenv install 2.5.0
$ rbenv global 2.5.0
$ rbenv rehash
$ ruby -v
$ bundle -v
$ mkdir ~/workspace
$ cd ~/workspace
$ rbenv local 2.5.0
$ bundle init
Gemfileを編集し# gem "rails"をコメント解除する
$ bundle install --path=vendor/bundle
$ bundle exec rails -v
$ bundle exec rails new test
$ rails server

scaffoldで作成したファイルを全削除

rails generate scaffold "name" "field:type"〜
rails destroy scaffold "name"
rails generate scaffold
rails db:drop
rails db:create
rails db:migrate

slimをぶちこむ

    gem 'slim-rails'
    bundle install
    gem install html2slim
    rbenv rehash
    for file in app/views/devise/**/*.erb; do erb2slim $file ${file%erb}slim && rm $file; done

locale

  • i18n対応

    • gem 'rails-i18n', '~> 5.1
  • enum使うときにはこれがあると便利

    • gem 'enum_help'
  • application.rb

    # i18n
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
    config.i18n.default_locale = :ja
    config.i18n.available_locales = [:ja, :en]
    
  • config/locales/ 配下に各ロケールの表記を記述する.

  • t('jaの階層を除いたパス') 関数を利用するとlocalesファイルの内容にあわせて各ロケールに応じたtranslationが行われる.

    • localesファイルはlocales配下にあれば特にパス指定等は必要ない.どの階層にあっても読まれるようだ.

問答無用でdb作り直す

  rails db:drop
  rails db:create
  rails db:migrate

1つのformで複数のmodelを編集したい

f.selectにclassを

  • option(:include_blankや:prompt)は第3引数に設定し,html_options(classやstyle)は第4引数に設定する.
    • reference見ろって話.
  • ex.) f.select :person_id,Person.all.collect { |p| [ p.name, p.id ] }, {}, {class: 'form-control'}
  • railsでf.selectにclassを設定する - Qiita

Dockerでrails開発をしよう

  • docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle --api
    • 各種railsファイルが作成される
    • config/database.ymlにdb接続情報を書き込む.(docker-compose参照)
default: &default
adapter: postgresql
host: db
username: postgres
password: railstest123
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  • docker-compose build
  • docker-compose run --rm api bundle exec rails webpacker:install
  • docker-compose run --rm api rake db:create
  • docker-compose run --rm api bundle exec rails generate controller Welcome index
  • docker-compose up
  • docker-compose run -rm api rake db:create db:migrate db:seed

migration

  • 指定できる型
string : 文字列(-255)
text : 長い文字列(-4294967296)
integer : 整数(2byte)
bigint: 大きな整数(4byte)
float : 浮動小数
decimal : 精度の高い小数
datetime : 日時
timestamp : タイムスタンプ
time : 時間
date : 日付
binary : バイナリ
boolean : Boolean
  • commands
    • $ rake db:migrate
    • $ rake db:rollback
    • $ rails generate migration クラス名
    • $ rails generate model モデル名