この単純なモデルを考えてみましょう。a にProject
は 1 つがProjectType
あり、当然多くProjects
のものがそのタイプになる可能性があります。
したがって、Project
has_one :project_type
(と呼ばれるtype
) とProjectType
has_many :projects
.
私の移行では、(この例では簡略化されています)
create_table :projects do |t|
t.string :name, :null => false
t.integer :type
end
create_table :project_types do |t|
t.string :name, :null => false
end
私のプロジェクトクラスは次のようになります (この例では再び簡略化されています)
#!usr/bin/ruby
require 'active_record'
class Project < ActiveRecord::Base
has_one :type, :class_name => 'ProjectType'
end
そして、私の ProjectType は次のようになります
#!usr/bin/ruby
require 'active_record'
class ProjectType < ActiveRecord::Base
has_many :projects
end
これが機能することを確認するための簡単な単体テストを作成しました
#test creation of Projects and related objects.
def test_projects_and_etc
pt = ProjectType.create(:name => 'Test PT')
project = Project.create(:name => 'Test Project', :type => pt)
assert project.type.name == 'Test PT', "Wrong Project Type Name, expected 'Test PT' but got '#{project.type.name}'."
# clean up
project.destroy
pt.destroy
end
このテストは、アサートでエラーをスローします。
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: project_types.project_id: SELECT "project_types".* FROM "project_types" WHERE ("project_types".project_id = 1) LIMIT 1
SQL は、テーブルにproject_id
フィールドがあると想定しているようですが、 aを many に関連付けることができる場合、それは意味がありません。私の問題は、as notを参照できるようにしたいということと関係があると思いますが、これをどのように修正するかわかりません。project_types
ProjectType
Projects
ProjectType
project.type
project.project_type