Rails関連

提供: 文具堂 Wiki三昧
移動先: 案内検索

公式ドキュメント

Ruby on Rails Guides

A Guide for Upgrading Ruby on Rails (Railsバージョンアップグレード手順)

Rails APIドキュメント

rails gem 全バージョン調査

$ gem search -ra ^rails$

*** REMOTE GEMS ***

rails (5.0.0.1, 5.0.0, 4.2.7.1, 4.2.7, 4.2.6, 4.2.5.2, 4.2.5.1, 4.2.5, 4.2.4, 4.2.3, 4.2.2, 4.2.1, 4.2.0, 4.1.16, 4.1.15, 4.1.14.2, 4.1.14.1, 4.1.14, 4.1.13, 4.1.12, 4.1.11, 4.1.10, 4.1.9, 4.1.8, 4.1.7.1, 4.1.7, 4.1.6, 4.1.5, 4.1.4, 4.1.3, 4.1.2, 4.1.1, 4.1.0, 4.0.13, 4.0.12, 4.0.11.1, 4.0.11, 4.0.10, 4.0.9, 4.0.8, 4.0.7, 4.0.6, 4.0.5, 4.0.4, 4.0.3, 4.0.2, 4.0.1, 4.0.0, 3.2.22.5, 3.2.22.4, 3.2.22.3, 3.2.22.2, 3.2.22.1, 3.2.22, 3.2.21, 3.2.20, 3.2.19, 3.2.18, 3.2.17, 3.2.16, 3.2.15, 3.2.14, 3.2.13, 3.2.12, 3.2.11, 3.2.10, 3.2.9, 3.2.8, 3.2.7, 3.2.6, 3.2.5, 3.2.4, 3.2.3, 3.2.2, 3.2.1, 3.2.0, 3.1.12, 3.1.11, 3.1.10, 3.1.9, 3.1.8, 3.1.7, 3.1.6, 3.1.5, 3.1.4, 3.1.3, 3.1.2, 3.1.1, 3.1.0, 3.0.20, 3.0.19, 3.0.18, 3.0.17, 3.0.16, 3.0.15, 3.0.14, 3.0.13, 3.0.12, 3.0.11, 3.0.10, 3.0.9, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.3.18, 2.3.17, 2.3.16, 2.3.15, 2.3.14, 2.3.12, 2.3.11, 2.3.10, 2.3.9, 2.3.8, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.2.3, 2.2.2, 2.1.2, 2.1.1, 2.1.0, 2.0.5, 2.0.4, 2.0.2, 2.0.1, 2.0.0, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6, 1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.0, 0.14.4, 0.14.3, 0.14.2, 0.14.1, 0.13.1, 0.13.0, 0.12.1, 0.12.0, 0.11.1, 0.11.0, 0.10.1, 0.10.0, 0.9.5, 0.9.4.1, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.8.5, 0.8.0)

railsのインストール

gem install rails

バージョンを指定してインストール
gem install rails -v 4.2.7.1

新規アプリケーション作成

アプリケーション作成 (SQLite3利用)
rails new appname

アプリケーション作成 (MySQL利用) config/database.yml の記述がMySQL用になる
rails new appname -d mysql

アプリケーション作成 RSpecを利用するためテストを生成しない
rails new appname -T

バージョンを指定してアプリケーション作成 (バージョン4.2.7.1を指定)
rails _4.2.7.1_ new appname

サーバ起動

rails server
rails s

ポートを指定して起動
rails server -p 3001

productionモードで起動
rails server -e production

Gemfile

pry

group :development, :test do
  gem 'pry'
  gem 'pry-nav'
  gem 'pry-rails'
end

Asset Pipeline

プリコンパイル (本番環境のみ)
rake assets:precompile
RAILS_ENV=production bundle exec rake assets:precompile

プリコンパイルされたアセットのクリア
rake assets:clean

Capistrano

gem install capistrano
cd appname
capify .
vi config/deploy.rb

cap deploy:setup
cap deploy:update

Passenger再起動
cap deploy:restart

ルーチン
git push
cap deploy:update

Puma
cap production puma:start
cap production puma:stop
cap production puma:restart
cap production puma:status

RSpec

vi Gemfile
--------------------------------------------------
group :development, :test do
  gem 'rspec-rails'
end
--------------------------------------------------
bundle install

インストール
rails generate rspec:install

コントローラ用specファイルの作成
rails generate rspec:controller posts

RSpecによるテスト実行
rake spec

Scaffold

rails generate scaffold customer name:string memo:text
rails generate scaffold server name:string customer_id:integer memo:text
rails generate scaffold author user:references name:string birth:date address:text ctype:string photo:binary
rails generate scaffold review book:references user:references body:text
rails generate scaffold mail_queue recipients:string subject:string body:text sent_at:datetime

関係テーブル

rails generate model authors_book author:references book:references

IDとタイムスタンプの作成をしない
vi  db/migrate/xxxxxx_create_authors_books.rb
-----------------------------------
    create_table :authors_books, :id => false do |t|
...
     t.timestamps 削除
-----------------------------------

rakeタスク一覧の表示

rake -T
rake --tasks

アプリ情報の表示

rake about
---
About your application's environment
Ruby version              1.9.3 (x86_64-darwin11.3.0)
RubyGems version          1.8.24
Rack version              1.4
Rails version             3.2.3
JavaScript Runtime        therubyracer (V8)
Active Record version     3.2.3
Action Pack version       3.2.3
Active Resource version   3.2.3
Action Mailer version     3.2.3
Active Support version    3.2.3
Middleware                ActionDispatch::Static, Rack::Lock, #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007fca9c3cad98>, ...略
Application root          /Users/hitoshi/books
Environment               development
Database adapter          mysql2
Database schema version   20100314120023

利用できるルートの確認

ポート3000でserverを起動している場合のルート確認用URL

http://localhost:3000/rails/info/routes

rails routes (Rails 5以降)
rake routes
--------------------------------------------------
    books GET    /books(.:format)          {:action=>"index", :controller=>"books"}
          POST   /books(.:format)          {:action=>"create", :controller=>"books"}
...略
--------------------------------------------------

Logger(ログ)出力

logger.info(session[:mail])

DBマイグレーション

ITの仕組みまとめサイト Rails-migration

rake db:migrate
rake db:migrate RAILS_ENV=production

ステータス確認

$ rake db:migrate:status

database: blog_develop

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20160913130507  Create posts
   up     20160913141736  Create comments

指定ステップ数だけマイグレーションしなおし

rake db:migrate:redo STEP=7

1回分巻き戻し

rake db:rollback

後からフィールド追加 (デフォルト値が必要か確認する)

rails g migration AddPasswordAndBillNoToDomain password:string bill_no:string
rails g migration AddCancelAndCanlelDateToDomain cancel:boolean cancel_date:date

デフォルト値設定

  def self.up
    add_column :domains, :cancel, :boolean, default: false
    add_column :domains, :cancel_date, :date
  end

データベースの削除

rake db:drop:all

データベースを空にする

rake db:reset

シードファイルのロード

rake db:seed
rake db:seed RAILS_ENV=production

フィクスチャのロード

rake db:fixtures:load

特定のフィクスチャをロード
rake db:fixtures:load FIXTURES=customers.yml

フィクスチャ (Fixture)

http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

ラベルではなくidを取得したい場合

george_reginald:
  monkey_id: <%= ActiveRecord::FixtureSet.identify(:reginald) %>
  pirate_id: <%= ActiveRecord::FixtureSet.identify(:george) %>

SQLiteからMySQLへDBデータ移行

Redmine(Rails) の DB を SQLite3 から MySQL に移行する - garin.jp

script/plugin install git://github.com/adamwiggins/yaml_db.git
rake db:dump RAILS_ENV=production
vi config/database.yml
---------------------------
production:
  adapter: mysql
  database: redmine
  host: localhost
  username: root
  password: XXXXX
  encoding: utf8
---------------------------
rake db:load RAILS_ENV=production

コンソール

rails console
rails c

Spring

ステータス確認
spring status

起動
spring server

停止
spring stop

データベースコンソール

SQLite3ならSQLite3のクライアント、MySQLならMySQLのクライアントが該当環境のDBを指定した状態で起動する。

rails dbconsole
rails dbconsole production

モデル

オーダー

title 昇順
Post.order(:title)
Post.order(title: :asc)

title 降順
Post.order(title: :desc)

バリデーション

必須
validates :title, presence: true

文字数制限
validates :name, length: { maximum: 200 }

値の制限 trueもしくはfalse
validates :notify, inclusion: { in: [true, false] }

Scope

scope :active, -> { where(cancel_date: nil) }
scope :inactive, -> { where.not(cancel_date: nil) }

scope :active, -> { where(cancel_date: nil).joins(:host).where("hosts.cancel_date IS NULL") }
scope :inactive, -> { joins(:host).where("domains.cancel_date IS NOT NULL OR hosts.cancel_date IS NOT NULL") }

デフォルトスコープ
default_scope { where(cancel_date: nil) }

デフォルトスコープに定義済みスコープを設定
default_scope { active }

コントローラ

Rendering Text, Rendering HTML

http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-text

plain textを返す [text/plain]
render plain: "OK"

テンプレートを使用せずにhtmlを返す
ステータス403 Forbidden [text/html]
render html: "<html><head><title>403 Forbidden</title></head><body><center><h1>403 Forbidden</h1></center></body></html>".html_safe, status: 403

レイアウト

コントローラ全体に指定

class CalendarController < ApplicationController
  layout 'iphone'
  ...
end

アクションに指定

  def iphone
    render :iphone, layout: 'iphone'
  end

環境の判定 (production, development)

production環境の判定
if Rails.env.production?
  do_something
end

development環境の判定
if Rails.env.development?
  do_something
end

production環境でSSL/TLS接続を強制

vi config/environments/production.rb
------------------------------------
  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  config.force_ssl = true
------------------------------------