考虑这个简单的模型,其中 aProject
有一个ProjectType
,自然很多Projects
可以是这种类型。
所以 a Project
has_one :project_type
(称为type
) 和 a 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 相关联,project_types
那就没有意义了。我怀疑我的问题与我希望能够引用as not有关,但我不确定如何解决这个问题。ProjectType
Projects
ProjectType
project.type
project.project_type