2011-05-28 5 views
0

私のアプリ、CompanyUk、CompanyNameの2つのモデルがあります。 CompanyUkには数多くのCompanyNamesがあります。 ActiverecordはCompanyUk.CompanyNamesを作成していますが、CompanyNamesは見つかりません。Rails "magic"結合が機能しない - activerecordがリンクされたテーブルエントリを見つけられない

class CompanyName < ActiveRecord::Base 
    belongs_to :CompanyUk, :foreign_key => "company_number" 
end 

class CompanyUk < ActiveRecord::Base 

    has_many :CompanyNames, :dependent => :destroy, :foreign_key => "company_number" 

    validates_presence_of :company_number, :reg_office, :type, :incorporation_date #, :next_accounts_date, :next_return_date # should eventually have these 

    validates_uniqueness_of :company_number, :case_sensitive => false 

    validates_associated :CompanyNames 

    set_inheritance_column :kind 
end 

class CreateCompanyUks < ActiveRecord::Migration 
    def self.up 
    create_table :company_uks do |t| 
     t.string :company_number, :null=>false 
     t.text :reg_office, :null=>false 
     t.string :type, :null=>false 
     t.string :business_nature 
     t.string :status 
     t.date :incorporation_date, :null=>false 
     t.date :last_accounts_date 
     t.date :next_accounts_date 
     t.date :last_return_date 
     t.date :next_return_date 

     t.primary_key :company_number 

     t.timestamps 
    end 
    end 
end 



class CreateCompanyNames < ActiveRecord::Migration 
    def self.up 
    create_table :company_names do |t| 
     t.string :company_number, :null=>false 
     t.string :name, :null=>false 
     t.date :date_adopted, :null=>false 

     t.timestamps 
    end 
    end 
end 

データベースの内容::ここでは、コードです

irb(main):011:0> CompanyUk.all 
=> [#<CompanyUk id: 1, company_number: "12345", reg_office: "Example office", type: "Private company limited by shares", business_nature: nil, status: nil, incorporation_date: "2011-05-28", last_accounts_date: nil, next_accounts_date: nil, last_return_date: nil, next_return_date: nil, created_at: "2011-05-28 09:47:19", updated_at: "2011-05-28 09:47:19">] 

irb(main):012:0> CompanyName.all 
=> [#<CompanyName id: 1, company_number: "12345", name: "foo ltd", date_adopted: "2011-05-28", created_at: "2011-05-28 09:47:19", updated_at: "2011-05-28 09:47:19">, #<CompanyName id: 2, company_number: "12345", name: "foo ltd", date_adopted: "2011-05-28", created_at: "2011-05-28 10:09:29", updated_at: "2011-05-28 10:09:29">, #<CompanyName id: 3, company_num 
ber: "1", name: "foobar ltd", date_adopted: "2011-05-28", created_at: "2011-05-28 0:10:52", updated_at: "2011-05-28 10:10:52">] 

そこにもかかわらず、複数のCompanyNamesさ:

irb(main):009:0> CompanyUk.all.first.CompanyNames 
=> [] 

また、CompanyUk.CompanyNamesを通じて新しい仕入を作成する」doesnのは、 CompanyNumber(CompanyUkのプライマリキーとリレーション上に設定された外部キー)を正しく設定しないでください。

これを解決する方法はありますか?あるいは、モデルや関連がどのように機能するかについての良い参考資料ですか?

答えて

1

大会に反対する特別な理由はありますか?

例:この:

has_many :CompanyNames, :dependent => :destroy, :foreign_key => "company_number" 

...次のようになります。

has_many :company_names, :dependent => :destroy 

...限り、移行があるよう:

class CreateCompanyNames < ActiveRecord::Migration 
    def self.up 
    create_table :company_names do |t| 
     t.belongs_to :company_uk, :null=>false 
     t.string :name, :null=>false 
     t.date :date_adopted, :null=>false 

     t.timestamps 
    end 
    end 
end 

ガイドの移行で作業するためのRails 3での関連付け:

http://guides.rubyonrails.org/migrations.html

http://guides.rubyonrails.org/association_basics.html

Railsは物事がちょうど動作させるために設定オーバー大会に大きく依存している。注(TM)。

+0

これらのガイドラインを読んだことがありますが、この説明のための命名規則は見られませんでした。これは私の最大の不満の1つです。の慣習が文書化されているようです。 – Marcin

+0

Railsは結合を行っていますが、company_numberに参加していません。 CompanyUk.all.first.company_namesを要求すると、選択される唯一のレコードはCompanyUkとは異なるcompany_numberを持つCompanyNameです。 (ただし、CompanyUkのcompanyUnumberと一致するcompanyNameのCompanyNameでは、逆方向の関連付けが正しく機能します)。 – Marcin

+0

@Marcinは同意しましたが、これらの規則は実際には文書化されておらず、ただ仮定されています。 – Jits

関連する問題