Rails メモ

# はじめに
Qiitaの下書きがいっぱいになった＆公開したら良いじゃんというのをうけ公開する。
色々書いてるからRails以外のことにも結構とんでる

メモなので新しいことがあると更新していく

# 思想
- CoC (Convention over Configuration)

設定より規約
慣例に従う範囲では設定不要
例：ファイルの自動読み込み, routingのresourceでアクションやパスが決まる, など

- DRY (Don't Repeat Yourself)

重複を防ぐ→ 変更容易性が高くなる
例：concerns, partial view(部分テンプレート)

- REST (REpresentational State Transfer)

一意なURLでコンテンツが認識できる

![image](https://qiita-image-store.s3.amazonaws.com/0/96838/396c2ad9-4586-d050-ab55-8800db1030d1.png)

http://railsguides.jp/routing.html

# フォルダ構成
http://railsdoc.com/rails_base

# 手順
```
$ rails new アプリ名
$ rails server -b 0.0.0.0
```

# generate系でよく使うの
http://ruby-rails.hatenadiary.com/entry/20140802/1406948695

# DB 
`config/datebase.yml` に使用するDB情報が記述されている
`db/scheme.rb` は現在のRailsが管理しているDB情報を持っている
`rails db` でcl上でDBの情報を確認できる

モデルファイルを作成

```
$ rails generate model user name:string username:string location:string about:text
```
この2つができる
app/models/user.rb
db/migrate/~.rb

DBの作成・削除

```
$ rake db:create
$ rake db:drop
```
         
tableの作成

```
$ rake db:migrate
```

seedを追加

```
$ rake db:seed
```

データベースを実際に作成

```
$ rake db:migrate
```

シードの追加
db/seeds.rb に下のように追加

```rb
@user = User.new
@user.name = 'Ryo Suzuki'
@user.username = 'ryooopan'
@user.location = 'Kanagawa, Japan'
@user.about = 'Hello, I am Ryo. I am from database!'
@user.save
```

or

```rb
Title.create(:name => '観察日記', :sales_date => '2011-11-14', :price => 1000)
```

こんな感じで追加して

```
$ rake db:seed
```

model操作のクエリ 色々
http://qiita.com/merrill/items/8ec158953cb4c2715c7b

### migration デフォルト
changeのメソッドが入っているが、changeを適用できるメソッドとそうじゃないものがある。
そのためchangeを適用できないものは、up/downを自分で書く

### 追加したカラムを同じマイグレーション内で扱う
追加後に以下を挟む

```
モデル名.reset_column_information
```

# sqlite dump
`$ rails db` のちdump
dump
http://www.dbonline.jp/sqlite/manage/index4.html
import
http://www.dbonline.jp/sqlite/manage/index5.html

# new
ページはnewのみ
newはcontrollerでモデルを作成、viewはモデルに合わせたフォームを作成
post先はroutingで勝手にcreateに
createは、controllerのみでparamsで受け取ったデータでモデルを作成、その後saveしrender indexが一般的

モデルはnewとbuildがある。
どちらかというとbuildがprefer
http://qiita.com/sukechansan/items/6bae532b4f678fdcf87d

# ページの追加

```
rails g controller (モデル名) ページ名
```

app/controllers/ページ名 にコントローラ(ページ間の繋がり)を記述

`config/routes.rb` にget postの関係を記述

# パーシャル(partial)
renderで外部ファイルを呼ぶ
ページ分割などに使う

# アセットパイプライン
マニフェストファイル，プリプロセッサエンジンなども
https://railstutorial.jp/chapters/filling_in_the_layout?version=5.1#sec-the_asset_pipeline


# ルーティング

railsのルーティングの一般的なものは、config/routes.rb に

resources :モデル名s

rake routesで確認可能(Webページで適当なURL打ってもOK)

# rails runner
railsの環境を読み込んだ上で任意のrubyコードが実行できる
http://qiita.com/3yatsu/items/416411c0a8f696dbf99e

# 自作クラス
lib下に置く
リンクに複数パターン記述されている。
http://qiita.com/azusanakano/items/885fe3236977580b00c9

# rakeタスクの作成
rails g task タスク名で作成可能
http://morizyun.github.io/blog/rake-task-rails-rspec-test/

# デバック

rubyのpryをrailsの環境を読み込んだうえで実行してくれる。

```
$rails console
```

`binding.pry`とコードに打ち込むと、そこがブレイクポイントになる。

# bootstrap
lessとsassのものがあるのを確認
sassのほうが導入が楽だった 
http://qiita.com/shizuma/items/83cdadbe0a629f1f74d1
### less
http://qiita.com/kamizuno/items/5c3ecceea5aa78e25058
https://github.com/seyhunak/twitter-bootstrap-rails

###sass
http://techacademy.jp/magazine/7663
https://github.com/twbs/bootstrap-sass

## bootstrap switch
optionは公式に記述
https://github.com/manuelvanrijn/bootstrap-switch-rails

bootstrapのデフォルト色以外を使う場合
http://stackoverflow.com/questions/29575437/how-to-customize-bootstrap-switch-color

こんなのもある
http://www.w3schools.com/bootstrap/bootstrap_button_groups.asp

# ほのか
日本語をきれいに表示できる拡張フレームワーク
http://qiita.com/iguchi1124/items/7a2fe94d0897e217290d

# mdl
material design liteを使う
http://qiita.com/rsakao/items/d0e6e2aa3f5180d5c2de

turbolinksを消しても良いが、遅くなるのでこちらで対応
app/assets/javascripts/application.jsに以下を追加

```js
document.addEventListener('turbolinks:load', function() {
  componentHandler.upgradeDom();
});

document.addEventListener('page:change', function() {
  componentHandler.upgradeDom();
});
```

# クエリ
一般的なもの
http://qiita.com/merrill/items/8ec158953cb4c2715c7b
日付や範囲
http://qiita.com/ishidamakot/items/4ca054a2204c174003b9

# serializers
attributes でJSONで返すべき値を決める

# Sprockets
sassやcoffeescriptなどを自動でコンパイルしてくれる

# slimを使う
http://qiita.com/moriyaman/items/c0d60406422677bcb398

# reactをどう使うか
react_webpack_rails
https://github.com/netguru/react_webpack_rails

# 共通部分を切り出す
http://qiita.com/shizuma/items/ae6ecb85615f74444693

Helper
viewで同じ要素だが一部だけ要素が違う場合などに使用
http://qiita.com/shunsuke227ono/items/21f5968ca7ca0391b583

# scope
modelに記述, クエリを簡単にかける＆使える
また、scopeをつなげることでAND, ORを再現できる
http://ruby-rails.hatenadiary.com/entry/20140814/1407994568

# renderメソッド 色々
http://ruby-rails.hatenadiary.com/entry/20141125/1416918957

# 多対多
中間テーブルについての説明
http://gomocool.net/gomokulog/?p=820
railsでの多対多
https://railsguides.jp/association_basics.html#has-many-through%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91
https://qiita.com/Kohei_Kishimoto0214/items/cb9a3d3da57708fb52c9

# secrets周り
ver5.1 以上
https://qiita.com/kikunantoka/items/dd22cf51071b93ba5b62
https://qiita.com/yoan/items/1a98371fe7ac524379e9

# form_for
エラー後、同じページにrenderされた場合、以下のクラスが付与される
このクラスを使って、エラーのフォームを赤にしたりが簡単にできる
`class="field_with_errors"`

# renderとredirect_toの違い
renderは変数などを保ったままの遷移、redirect_toは新規

https://qiita.com/1ulce/items/282cccba1e44158489c8
https://qiita.com/ko8@github/items/c0e7d2511b569e2d892e

# flash
ページ遷移中のメッセージの表示などに便利
http://railsdoc.com/references/flash
renderとredirect_toでの使い分け
https://qiita.com/seimiyajun/items/6a3e0236b40016f37b52

# 名前の変換
railsでどう変換されているのか見たいときに
https://qiita.com/hmuronaka/items/79208f54bb88397517a4