必要であればPassengerも
Apache+PassengerでRailsを動かす
インストール
sudo apt-get update
sudo apt-get install ruby
ruby -v
gem -v (rubyのverによってはgemが入らない)
sudo apt-get install ruby-dev zlib1g-dev liblzma-dev
sudo gem install nokogiri
sudo gem install rails
rails -v
プロジェクト作成
以下は普通の流れ。
rails new xxx(ここでxxxフォルダが作成される。初回のみsqlite関連のエラーがでる)
sudo apt-get install sqlite3
sudo apt-get install sqlite3 libsqlite3-dev
sudo gem install sqlite3
sudo apt-get install nodejs
bundle install
rails s -b 0.0.0.0
インストール後プロジェクト作成
ここから自分用
rails new xxx -B -C -T -d sqlite3
B:bundleスキップ
C:ActionCable関連生成しない
T:テスト関連生成しない
もしプロジェクトを別PCからのコピーする場合。コピーしたフォルダで
bundle update
rake db:migrate
を実行する必要がある。
タイムゾーン設定
/config/application.rb
に
config.time_zone = ‘Tokyo’
と追加。
Gemfileを編集
ここでは
Coffee-rails
を削除し、必要であればrubyのバージョンも指定して以下を追加する。
gem ‘bootstrap’
gem ‘tether-rails’
gem ‘font-awesome-sass’
を追加し、
bundle install
を実行。
bundlerはgemのバージョン管理をするプログラムで、
gemの依存関係が書かれたgemfile.lockを生成する。
手作業で編集するのはgemfileで、gemfile.lockはいじらない。
gemfile.lockのある場所でbundle installとすると、プロジェクトに必要なgemが入る。
bundlerが読んでいるのはlockのほうで、
bundle updateをするとlockを無視し、Gemfileを元にインスト、lockの再生成する。
Gemfileの中
‘=>1.3.0’ の表記は、1.3.0 以上という意味
‘~>4.1.0’ の表記は、4.1.0 以上 4.2以下
generators.rbの編集(rails gコマンドの設定)
config/initializers
の中に
generators.rb
を作成し以下を記述。
Rails.application.config.generators do |g|
g.helper false
g.assets false
g.skip_routes true
g.test_framework false
end
cssの設定
/assets/stylesheets/application.css
をscssに変更して、さらに同フォルダにmain.scssを作成。
application.scssには、以下を記述。
@import ‘bootstrap’;
@import ‘font-awesome-sprockets’;
@import ‘font-awesome’;
@import ‘*’;
Javascriptの設定
/assets/javascript/application.js
の中に以下を追記
//= require tether
//= require bootstrap-sprockets
モデルの作成
rails g model member
(単数形)
ここでマイグレーションクスリプトができる。
テーブル名: members
クラス定義: Member
クラスファイル: member.rb
テスト: member_test.rb
config/routes.rb
に
resources :members
と記述する。
マイグレーションスクリプト設定
migrateスクリプトはテーブルを定義する。
/db/migrate/xxx
参考
http://railsdoc.com/migration
データベース関連
rails new のときにデータベース接続用のymlが自動で作成される。
config/database.yml
が設定ファイル。
データベース作成・削除
rake db:create
テスト、開発用ができる。
rake db:create RAILS_ENV=production
本番用だけできる。
rake db:dropb
テスト、開発を削除できる。
rake db:dropb RAILS_ENV=production
本番用を削除できる。
テーブルの作成
rake db:migrate
テスト、開発用
rake db:migrate RAILS_ENV=production
本番用
migrateコマンドを実施するとschema.rbができる。
テーブルを作成後変更の場合、
rails g migration クラス名
でできたファイルにadd_column等を書いて再度db:migrateでOK
テーブルのバージョンを戻す場合
rake db:migrate VERSION=2015xxxx(数字の部分だけ)
rake db:rollbak(ひとつ前のバージョン)
現在のバージョン
rake db:migrate:status
テーブルの破棄(マイグレーションの書き直し)
rake db:migrate:reset
は
rake db:drop
rake db:create
rake db:migrate
の3つと同じ効果がある。
ちなみに、
rake db:reset
は、
rake db:drop
rake db:create
rake db:schema:load
rake db:seed
と同じ効果がある。
rake db:setup
は、
rake db:create
rake db:schema:load
rake db:seed
と同じ効果がある。
シードデータ
アプリを作ったときにdb/seeds.rbができる。
中にスクリプトを書いて以下を実行。
i = model_class.new
i.col_name = “xxx”
i.save!
というのが基本
rake db:seed
テストと開発
rake db:seed RAILS_ENV=production
本番
でデータが挿入される。
ルーティング
root “control_name#action_name”
はルートアクセス用。これは
:root
でこのパスが取得できるようになる。
基本は
request_type path => “control_name#action_name”
as: を付けることでシンボルで指定できる。
例1
routes.rb:
get “bad_request/:a/:b/:c” => “top#bad_request”
top_controller.rb:
def bad_request
render :text => “hello world” + ” ” + params[:b] + ” ” + params[:a] + ” ” + params[:c]
end
以下のアドレスでアクセスすると
http://192.168.102.15/app1/bad_request/taro/Mr/123
ブラウザには以下のように表示される。
hello world Mr taro 123
get “lesson/:action(/:name)” => “lesson”
のようにパラメータに()を付けると省略可能。
:actionに入る名称がコントローラで、そのまま呼ばれる。
コントローラの作成
rails g controller members
リソース用のコントロール作成
(CRUDのような集合に対する操作をするのは複数形、それ以外は単数形)
クラス定義: MembersController
クラスファイル: members_controller.rb
テンプレートフォルダ: app/views/members/アクション名
テスト: members_controller_test.rb
コントローラでは以下を定義していく。
index /members
new /members/123
create /members/new
show /members/123/edit
edit /members – POST
update /members/123 – PATCH
destroy /members/123 – DELETE
rails gの変更をしていなければ、コントローラ作成と同時に5個のファイルが生成される。
controllers/top_controller.rb
views/top/index.html.erb
helpers/top_helper.rb
assets/javascript/top.js
assets/stylesheets/top.scss
変更したい場合は、generators.rbを修正する。
ビューの作成
/views/controller_name/method_name.html.erb
が自動で呼ばれる。
アクションの定義がなくてもビューは呼び出される。
テンプレートの作成
全体を囲うテンプレートは、
views/layouts
に入っている。
application.html.erb
ビューが入るのは
<% yield %>
ただし、
views/layouts/controller_name.html.erb
が存在する場合、
application.html.erbより優先して、
上記のファイルが読まれる。
アクション内で
render layout: false
とすると、テンプレートが読み込まれない。
ビューは読まれる。
アクション内で、
render :text => “xxx”
とすると、xxxだけでビューもテンプレートも呼ばれない。
ヘルパーメソッド
app/helper
の中で定義する。
ビューの中で自由に使えるメソッド
バリデーション
モデルの中に書く。以下のような感じ
validates :number,presence: true, length:{ オプション }
saveが呼ばれたタイミングで登録しようとした値が正しいかチェック。
モデルの更新方法
モデルのクラスメソッド
ファインダーメソッド
find: 主キー(id)を渡す
find_by: カラム:値のハッシュを渡す
等
クエリメソッド
where: カラム:値のハッシュを渡す
find_by_sql: SQLを渡す。
等
findなどレコードで取得するのがファインダーメソッドで、モデルに直接使う(クラスメソッド)
レコードはモデルオブジェクトとなる。
whereなどのクエリメソッドだとリレーションオブジェクトが返ってくる。検索条件を保持している。
リレーションオブジェクトにはファインダーメソッドが使える。
開発時のモード
development: 開発
test: 自動テスト用
production: 本番
railsやrakeコマンドは実行時に
RAILS_ENV
の中の環境変数によって動作が変わってくる。
コードの中でも
Rails.env.development?
や
Rails.env.production?
などでtrue/falseで確認できる。