rails アクセス制限について。
railsのアクセス制限には二種類ある。
「表示しない」と「urlにアクセスさせない」の二種類。
そもそも表示させたくない場合は、ビューを編集する。
例としては、投稿編集機能で、現在ログイン中のユーザーidと、投稿に関連づけられたユーザーidが一致している場合ににしか編集ボタンが現れないなど。
urlにアクセスさせたくない場合は、コントローラーを編集する。
例としては、投稿削除機能で、ユーザーidと投稿に関連づけられたユーザーidが一致している場合にしか、投稿削除のurlにアクセスできない(自分の投稿しか削除できない)など。
実装したいアクセス制限によって、編集するファイルを使い分けることが大切。
アソシエーション、Primary Key、foreign keyについて
まず、データには一つ一つ識別するためのidがあります。これをPrimary Key(主キー)と言い、Railsではidというカラム名でテーブル作成時に標準搭載されています。
そして、foreign keyというのはその親のid(Primary key)を保存するカラムです。
foreign keyを設定することにより、どの親に所属しているのか?というのを識別することができるようになります。
railsではモデル名_idとすると、それを自動的にforeign_keyであると認識してくれます。
例えば、tweetsテーブルにuser_idというカラムを追加することで、これはUserテーブルのid(primary key)のforeign_keyであると自動的に認識してくれます。
アソシエーション時や、モデルにreferences型で、カラムを追加する時(外部キーを参照する時)に使用します。
部分テンプレートを呼び出し、同時に変数を渡すrender partial collection について。
部分テンプレートをrende partialrで呼び出し、collectionにインスタンス変数を指定することで、部分テンプレートでもコントローラーで定義した変数が使用できるようになる。投稿一覧を繰り返し処理で表示したい場合などは、eachで囲って表示するよりも、render partial collection で表示した方が、部分テンプレートが一度しか読み込まれないので、処理速度も速くなり、コードも短くなる。
プログラミングを学ぶ上で気をつけたいこと
「作る」という目的があって「プログラミング」という手段なので、「作れるようになる」を目標にして学習を進める。「作るもの」に直接関わってこない知識までも自分の中に入れようとすると、学ぶ必要性を感じることができず、結果知っているだけで使えない知識を生み出すことになるので、「作るために必要な知識」に絞って学習するようにする。
deviseのバリデーションについて。
ユーザー新規登録時にパスワード再入力欄にパスワードを入力しなくても新規登録ができてしまう。という問題を解決するために、バリデーションをいじっていたが、deviseにはデフォルトで、再入力のパスワードが存在していないと新規登録できない。パスワードと再入力のパスワードが一致していなければ新規登録できない。というバリデーションがかかっているので、このような場合はフォームのスペルミス等を疑うようにする。
サーバーが停止できない時の対処法。
https://qiita.com/kanuu/items/fd6e33fca6ad6a90d059
lsof コマンドで動いてるものを探し出してきて、killする。
# 3000番で動いてるプロセス探す
$ lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 33783 kanuu 19u IPv4 0x1ee1c75a9552b9ad 0t0 TCP *:hbci (LISTEN)
# 上記のPIDの番号をkillする
$ kill -9 33783
これで止まるはず。