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型で、カラムを追加する時(外部キーを参照する時)に使用します。

input要素のvalueとplaceholderを両方同時に指定した場合。

input要素に、入力欄の初期値を決めるvalue属性とplaceholder属性を同時に定義した場合、優先されるのはvalue属性に入っている値です。がしかし、valueを述したものの、valueの中に値が入っていない場合、初期値には、pllaceholderに入っている値が表示されます。この両者の特性を活かすと、初めて新規投稿画面に遷移してきた場合は、placeholderで「タイトルを入力してください」などの初期値を設定することができ、入力に失敗してして、新規投稿ページを再表示する場合は、valueで入力値を保持したまま初期値として表示することができる。

部分テンプレートを呼び出し、同時に変数を渡す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

 

これで止まるはず。