2016-09-18 23 views
0

私はセクションと呼ばれるモデルを持っています。セクションには多くのセクションを持たせたいので、自己結合は開始する場所のようです。Rails - 自己結合モデルへの適切なアクセスがありません

Iセットアップ、このように私のコード:

モデルファイル

class Section < ApplicationRecord 
    belongs_to :offer 
    has_many :offer_items 

    # Self joins: 
    has_many :child_sections, class_name: "Section", foreign_key: "parent_id" 
    belongs_to :parent_section, class_name: "Section", optional: true 
end 

移行ファイル

class CreateSections < ActiveRecord::Migration[5.0] 
    def change 
    create_table :sections do |t| 
     t.string :name 
     t.references :offer, foreign_key: true 

     t.references :parent_section, foreign_key: true 
     t.timestamps 
    end 
    end 
end 

あなたがいないすべてのとして、私は、オプションとしてbelongs_to :parent_sectionを設定見ることができるようにセクションには親が必要です。私は私のセクションモデルのattribute_namesを印刷するとき

それは言う:私はミスをしなかった

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: sections.parent_id: SELECT "sections".* FROM "sections" WHERE "sections"."parent_id" = ? 

:child_sectionsを取得しようと

=> ["id", "name", "offer_id", "parent_section_id", "created_at", "updated_at"] 

は私にエラーを取得しますか?

答えて

1

あなたはこのあなたのsections

変化parent_idを持っていない。この上

has_many :child_sections, class_name: 'Section', foreign_key: 'parent_id' 

has_many :child_sections, class_name: 'Section', foreign_key: 'parent_section_id' 
+0

すべての小さなもの。前回私は手紙 "s"と今回は忘れてしまった...ありがとう! Dzięki! – Ancinek

+0

動作しないことの1つは、保存されない子セクションを作成する場合です。これは、offer_idがnilであるためです)。サブセクションを作成中にoffer_idを設定すると、手動でその問題が解決されます。自動的に実際に行う方法はありますか? – Ancinek

+0

あなたは 'before_create'のような' Section'で何かのコールバックを作ることができます。私は確かではありませんが、あなたはこの方法でオファーからすべてのセクションを得ることができると思います: 'something_offer.sections.joins(:child_sections)'。 –

関連する問題