パRails🚂
rails s
できない可能性が高いです。
今日は特になし
二章の51pから。🚂
@shodan
$ rails new
できてよかった🎉rails new
したときに階層がひとつ下になるのが嫌で色々試行錯誤したのを思い出しました。
$ git remote add
でリモートの設定変えればよいというのが勉強になりました。@hiromisugie
rails s
すると、自分の手元だとYarnのエラーが出ているので涙、解決を試みてみます。git add .
で全部ステージングされるgit remote add
でリモートの設定がかわるgit clone
しておいて次回以降はgit pull
でやっていくmoegi
git push origin https://github.com/KMZ0209/Perfect_Ruby_on_Rails_Ch2
でクローン先にpushできるの知った@shodan
@hiromisugie
2-2 モデルを扱う / ActiveRecord::Relationについて まで
https://github.com/KMZ0209/Perfect_Ruby_on_Rails_Ch2/pull/3
2-2 モデルを扱う / scopeを定義する から
rails c
でirb
がたちあがるのも初めてしった。where
を使って返ってきたActiveRecord::Relation
のインスタンスにArray
クラスのメソッドが当てられなかったことを思い出しました。
ActiveRecord::Relation
のインスタンスはこういうSQLを発行するよみたいな感じ?@shodan
nil
とか、微妙にややこしい。git push origin @
@hiromisugie
find
メソッドはidを使って検索する、find_by
メソッドは作成したカラム(nameやprice)を使って検索するfind
メソッドで見つからない場合はActiveRecord::RecordNotFound
が返り、find_by
で見つからない場合はnilが返る。それぞれ異なるので覚えておきたい。where
メソッドを使う。その際、結果はActiveRecord::Relation
というクラスのインスタンスが返ってくる。これは配列風のオブジェクト。(風とは…と思ったけど、to_aで本当の配列になるところでなるほどと思った)git push origin @
で今いるブランチのプッシュができる(別の輪読会で得た知見をシェアできてよかったです。今いるブランチを勘違いしていないかだけご注意です)find
メソッドやfind_by
メソッドでは1件のレコードをインスタンスとして取得できる
.カラム名
で情報を抜き出せるwhere
メソッドでは複数件のレコードを取得でき、配列「風」のオブジェクトが返ってくる
.to_a
をつけるときとつけないときのSQLの実行タイミングの違いが分からなかった。@
にすると現在のブランチをpushできる@djkazunoko
@
はHEAD
のaliasのはず2-2 モデルを扱う / scopeを定義する から
59pのコラム「デフォルトスコープに注意」まで。
https://github.com/KMZ0209/Perfect_Ruby_on_Rails_Ch2/pull/4
2-2-2 モデル同士のリレーションから。🚂
find_by
はクラスメソッドで定義した場合はnil
をかえすけど、scope
で定義すると結果がnil
となった場合は該当scope
の検索条件を除外したクエリを発行し、必ずAvtiveRecord::Relation
を返すということはなんとなく理解できました。@hiromisugie
scope
を定義できる。これはよく利用する検索条件に名前をつけてひとまとめにしておける。find_by
で該当するものがない場合はnil
が返るが、scope
の定義でfind_by
を使うと、nil
が返るのではなく、その条件自体がなかったものとして返る??ので、scope
を使った場合と使わない場合とで結果が異なってくるので、注意が必要。scope
は便利だけど意図しない結果になることがあるから注意しましょうねということと理解しました。@motohiro-mm
@shodan
scope
で定義した検索条件は、結果がnil
になったときはそのnil
を引き起こす条件を除外した結果(つまり、なにかしらのActiveRecord::Relation
オブジェクト)を返す(?)仕様。nil
を返すfind_by
を組み込んだscope
を定義すると、意図と異なる挙動をするときがあるので注意が必要。2-2-2 モデル同士のリレーションから63pの途中まで。
今日のPR: https://github.com/KMZ0209/Perfect_Ruby_on_Rails_Ch2/pull/5
二章63p「多対多のリレーションを実現する」から。🚂
rails db
のところが最終的にきちんとできてよかったです。今後のためにエラーの内容は覚えておく。@shodan
rails db:reset
は新しくテーブルを作り直すコマンド。@motohiro-mm
@hiromisugie
rails g migration AddPublisherIdToBooks publisher:reference
みたいに書く。rails g migration
にまだ慣れないので慣れたいhas_many
もしくはhas_one
とbelongs_to
について改めて確認できましたbook.publisher.name
のように書籍モデルから出版社モデルの情報を取ってくることができるadd_reference
で参照を追加できるhas_many
とbelongs_to
によって1対多を表現できる二章63p「多対多のリレーションを実現する」から
68pの途中まで。
今日のPR: https://github.com/KMZ0209/Perfect_Ruby_on_Rails_Ch2/pull/6
第二章の68p、「バリデーションと「!」付きのメソッド」から。🚂
@sharoa
- 久しぶりに読んだ気がするw
- めちゃくちゃドキドキしました。
- 「1対多、多対1、1対1、多対多」の関係がある。
- 沢山知らない言葉がでてくるので新鮮なのと、これまた緊張が走ります。
valid?
をつかう@hiromisugie
has_many
すると共に、それぞれで中間テーブルをthrough
することで設定できる.errors
でエラー内容を呼び出すことができる。.errors.full_messages
だと人間が読みやすい形式で呼び出せる。.valid?
メソッドでできる。.mode line
を使うとSQLite3は出力結果をみやすくできる。