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

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

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

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

Q&A

解決済

1回答

251閲覧

【Rails5】リレーションの貼り方について

ssk

総合スコア332

Ruby on Rails 5

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

0グッド

1クリップ

投稿2018/05/04 04:13

has_one has_manyのリレーションで以下のエラーのため、新規作成、更新ができません。
affiliationモデルを2回見ているからでしょうか?

エラー内容

Cannot have a has_many :through association 'Attacklist#affiliation' which goes through 'Attacklist#hq_contract_base' before the through association is defined.

現状のリレーション

ruby

1# attacklist.rb 2has_one :base_attacklist, dependent: :destroy 3has_one :affiliation, through: :base_attacklist 4accepts_nested_attributes_for :base_attacklist 5 6has_one :attacklist_hq_contract, dependent: :destroy 7has_one :affiliation, through: :attacklist_hq_contract 8accepts_nested_attributes_for :attacklist_hq_contract

ruby

1# attacklist_hq_contract.rb 2belongs_to :attacklist 3belongs_to :affiliation

ruby

1# base_attacklist.rb 2belongs_to :attacklist 3belongs_to :affiliation

ruby

1# affiliation.rb 2has_many :base_attacklists, dependent: :destroy 3has_many :attacklists, through: :base_attacklists 4has_many :attacklist_hq_contract_bases, dependent: :destroy 5has_many :attacklists, through: :attacklist_hq_contract_bases

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

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

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

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

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

guest

回答1

0

ベストアンサー

affiliationを2回見てるからでしょうか?とのことですが、その通りだと思います(^^)/
参照する際に、through: :base_attacklistsの方なのか、
through: :attacklist_hq_contract_basesの方なのか分からず、どのリレーションか
判別できないと思うので、その場合

has_many :base_attacklists, dependent: :destroy
has_many :attacklists, through: :base_attacklists
has_many :attacklist_hq_contract_bases, dependent: :destroy
has_many :attackings, through: :attacklist_hq_contract_bases, source: :attacklist

のように記述すれば、attackingsという仮想の子要素を、attacklist_hq_contract_basesを通してattacklistsの中から紐づけるというようなことが出来ます
ここで定義するattackingsは僕が適当に付けただけなので名前は何でも用途が分かりやすいやつで良いです!

投稿2018/05/23 09:34

編集2018/05/23 09:38
space-hippy

総合スコア136

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問