質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

259閲覧

User生成時に関連モデルを全て紐づけたいです

RThe

総合スコア25

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/06/03 22:48

下記のモデルがあります。

* User(親),Office(子),Via(中間) ⇨ 多対多

class User < ApplicationRecord has_many :via has_many :offices, through: :vials class Office < ApplicationRecord has_many :vials has_many :users, through: :vials accepts_nested_attributes_for :vials class Via < ApplicationRecord belongs_to :user belongs_to :office
class CreateVials < ActiveRecord::Migration[5.2] def change create_table :vials, id: false do |t| t.references :user, index: true, null: false, foregin_key: true t.references :office, index: true, null: false, foregin_key: true end end end

・ 全Userは必ず全Officeに紐づいているので、User生成時に全てのOfficeに紐づけたい

例:Officeが5つあれば、5つ全てを紐付ける。 かつ User生成後に、6つ、7つとOfficeが増えた場合は、増えた分も生成後のUserに紐づけたい

上記を実現する方法を教えていただけないでしょうか?よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これ2,3日前に maisumakun さんが答えていたのと同じ問題に見えますが、もしかして同じ方かな。。。

User と Offce を関連つける というのは、関係あるOfficeもあるし関係ないOfficeもあるから、どれが関係しているかわかるようにしましょう

というためです。
ですので、必ず全てのOfficeが関わるなら、関係付けしないで User#offices に Office.all を定義すれば良いのでは。
関連付けがないとやりにくいことって何でしょう。それがわかるとも少しお役に立てる回答ができるかも

投稿2021/06/04 00:19

編集2021/06/04 00:20
winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RThe

2021/06/04 04:12

お答え頂き、ありがとうございます。 質問は課題ですので、もしかしたら同スクールの方かもです。 関連づけの意味を理解していないことに気づきました、User#officesとはuserコントローラーのアクションのことでしょうか。
winterboum

2021/06/04 04:31

いえ、model のmethodです
RThe

2021/06/04 13:54

model のmethodを#で示すのですね。 大変勉強になりました。ありがとうございます
winterboum

2021/06/04 23:49

いえ、そうではないです。 rubyの慣習として、class Some のインスタンスメソッドmethod を Some#method と書きます。modelもcontrollerもclassですからそこに差別は無いです。今回は UsesContropllerのmethodとしてではなくmodel Userの方だよ、ということです
RThe

2021/06/05 12:43

ベストアンサー後にもかかわらず、大変わかりやすく説明下さり、ありがとうございます。 今回の場合は、Userモデルにofficeをいうインスタンスメソッド(Office.all)を定義するのですね。
winterboum

2021/06/05 23:53

offices と複数形が良いです。人が BUGりますので
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問