質問: Post.new #モデル初期化 post.post_tags #post_tagsの取り出し?(空でした) post.tags #tagsの取り出し?(post_tagsが間にあるために取得できないのでしょうか..?) ``` 以上3点です。 この他に、こうするともっと良くなる等ございましたら、ご教授願えますでしょうか。 不明点等ございましたら、お手数ですが質問していただけると嬉しいです。 追加で回答させていただきます。 よろしくお願いいたします。 長文失礼しました。
回答: (1) post.rb ``` belongs_to :type # 単数形 ``` です。 (2) 多対多に関しては、中間テーブルまで一気に作成するのではなく、中間テーブルと、その先のテーブルを別に作成する必要があると思います。 (ここは僕もありそうだと思って調べたのですが、見つからなかったので、そういう風に実装しています。) また、rails cなどで確認していただけるとわかると思うのですが、buildはただforein_keyに自分のidを入れるだけなので、呼び出し元をdbに保存していないと意味がありません。 ex. ``` post_1 = Post.new post_1.post_tags.build # このpost_tagのpost_idはnilになる post_2 = post.create post_2.post_tags.build # ここでpost_tag.post_idが入るので、post_2.post_tagsで取得できる ``` なので、post_paramsとtag_paramsが定義されていると仮定すると、 (もしわからなければrails strong parametersなどで検索して見てください。 機能的にはparams[:post][:body]とかやるのと同じです) ``` post = Post.create(post_params) tag = Tag.create(tag_params) post.post_tags.create(tag: tag) ``` などのようにすれば実装できると思います。 (3) ``` post = Post.new # この段階ではまだpost_tagやtagは作成されていない post.post_tags #=> [] tag = Tag.create post.post_tags.build tag: tag # post_tagの作成(保存ではない) post.tags # => tag ``` 以上です。 参考になれば幸いです。 また、僕も勉強中なので、もしなにか発見があれば教えていただけると嬉しいです。