Rails5 各種コマンドメモ

## よく使うコマンド

###作る系＆削除

```bash
コントローラーの作成・削除
$ rails g controller <name>
$ rails d controller <name>

加えて、アクションとビューのテンプレートを一緒に作る
$ rails g controller <name> index show edit

マイグレーションファイルの作成
$ rails g migration AddTestNoToDevice test_no:integer

モデルクラス＆マイグレーションファイルの作成
$ rails g model book isbn:string price:integer author:references published:date cd:boolean

モデル＆マイグレーションファイル＆コントローラー＆ビューのテンプレート＆RESTFulなrouteを一度に作成＆削除
$ rails g scaffold Book isbn:string price:integer author:references published:date cd:boolean
$ rails d scaffold Book

※事前に何が起こるかを確認するには `-p` を付ける （dry-run）
```

よく使う `scaffold` のオプション。さしあたり使わないものは作らせないという方針で。

```bash
$ rails g scaffold ModelMame xxx:string --skip-assets --skip-helper --skip-stylesheets --skip-view-specs --skip-controller-specs --skip-routing-specs --skip-request-specs
```


参考:
 [いつも忘れる「Railsのgenerateコマンド」の備忘録](http://maeharin.hatenablog.com/entry/20130212/rails_generate)
[実はこんなにある rails generate](http://techracho.bpsinc.jp/shibuya/2014_07_24/18388)

### DB系rake task

Rails5では `rails`コマンドが`rake`タスクも実行できるようになったため、以下 `rake` の部分は `rails`でも正しく動作するはず。ただ、まだ当分の間はRails4を触る機会もあると思うので、ここでは `rake` と記載しておく。

全てのタスクで `-n`オプションを付けるとdry runになる（実際には処理を実行せずに何が起こるのかだけを表示してくれる）ので、迷ったら `-n`を付けて実行してみること。

```bash
# DBを作成するだけ
$ rake db:create

# 最新のmigrationまで順次実行
$ rake db:migrate

# 初期データの投入 ※既存データに追加される。
# ※unique制約違反を回避するため、db:resetすることの方が多いかな。
$ rake db:seed
```

複合系タスクは以下の表にまとめた。

| タスク | drop | create | migrate | schema:load | seed |
|:-:|:-:|:-:|:-:|:-:|:-:|
| db:setup          |    | 〇 |   | 〇 | 〇 |
| db:reset          | 〇 | 〇 |    | 〇 | 〇 |
| db:migrate:reset  | 〇 | 〇 | 〇 |    |   |

###DBクライアントの起動＆よく使うコマンド

```bash
$ rails db
```

```pgsql:PostgreSQL
=> \d            … テーブル一覧
=> \d テーブル名  … テーブルschema
=> select * from users;
=> \?   … ヘルプ
=> \h   … SQLヘルプ
=> \q   … 終了
```

```sqlite3:SQLite
sqlite> .tables
sqlite> .schema books
sqlite> SELECT * FROM books;
sqlite> .quit
```

### rspecのspecファイルを作る

```bash
$ rails g rspec:model Book
$ rails g rspec:controller Books   ※Bookじゃだめ
$ rails g rspec:feature blogs
```

application.rb で `controller_specs: false` や `model_specs: false` などとしている場合、上記コマンドで何も生成されないので注意。

参考サイト: [RailsでRspecを使用する](http://qiita.com/h7kayama/items/72cf82625dfed1466947)

### bundle/binの内容を Windows用のものからLinux用のものに変更する
Windows上でアプリケーションを作ると、bundle/binに作られる rails/rake...などのコマンドが全てruby.exeに依存したものになる。

```bash:各コマンドの1行目
#!/usr/bin/env ruby.exe
```

そのため、これをgitで共有し、Linux上で開発したりしようとするとちょいちょいめんどくさいことになる。
そんなときに必要となったのが、bundle/binの中身をLinux向けのものに置き換えるやり方。

```bash
$ cd ＜アプリケーションディレクトリ＞
$ bundle config --delete bin    # Turn off Bundler's stub generator
$ rake app:update:bin           # Use the new executables ※Rails4では rails:update:bin だった。
$ git add bin                   # Add bin/ to source control
```

```bash:置き換え後の各コマンドの1行目
#!/usr/bin/env ruby
```

ざっと見たところ1行目以外には変化がないので、`.exe`を削除するだけで良かったのかもしれない。。。

参考: [Should I add the Rails 4 bin/ directory to git? - StackOverFlow](https://stackoverflow.com/questions/18591399/should-i-add-the-rails-4-bin-directory-to-git)


### MySQLのrootパスワードを変更（空にする）
手順の詳細については理解していないので、もしかしたら危険なことをやっているかもしれない。要注意！

```bash
$ sudo service mysql stop
$ sudo /usr/bin/mysqld_safe -u root --skip-grant-tables &

$ mysql -u root

mysql> use mysql
mysql> UPDATE user SET Password = password('') where user = 'root';
mysql>  flush privileges;
mysql> \q

$ sudo killall mysqld
$ sudo service mysql start
```

----

# その他
ActiveRecordについてはこちらにまとめています。
[ActiveRecord CRUDサンプル - Qiita](http://qiita.com/leon-joel/items/ab39f46cb374f57f7481)
[ActiveRecord ～ 複数テーブルにまたがる検索（先読み、JOINなど） - Qiita](http://qiita.com/leon-joel/items/f26556c9e56833983856)