如何在不创建foreign_key的情况下使Active Record关联工作?

时间:2015-05-07 09:25:54

标签: ruby-on-rails-4 activerecord

我希望item能够从ItemType表中获取相关记录:

item = Item.first

item.item_type # <--- ERROR

但是我收到了一个错误:

  

SELECT“item_types”。* FROM“item_types”WHERE“item_types”。“item_id”   =? LIMIT 1 [[nil,11]] SQLite3 :: SQLException:没有这样的列:item_types.item_id:SELECT“item_types”。* FROM“item_types”WHERE   “item_types”。“item_id”=? LIMIT 1 ActiveRecord :: StatementInvalid:   SQLite3 :: SQLException:没有这样的列:item_types.item_id:SELECT   “item_types”。* FROM“item_types”WHERE“item_types”。“item_id”=?   限制1

从错误中我可以看到ActiveModel尝试访问item_id列。 但我不想在item_id表中创建ItemType列...这是一个包含以下项目类型的枚举表:

#id|name

1|"Task"
2|"User Story"
3|"Bug"
4|"Feature Request"

项目模型

#
# Table name: items
#
#  id           :integer          not null, primary key
#  name         :string
#  created_at   :datetime         not null
#  updated_at   :datetime         not null
#  item_type_id :integer
#

class Item < ActiveRecord::Base
    has_one :item_type
end

ItemType模型

# == Schema Information
#
# Table name: item_types
#
#  id         :integer          not null, primary key
#  name       :string
#  created_at :datetime         not null
#  updated_at :datetime         not null
#

class ItemType < ActiveRecord::Base
end

1 个答案:

答案 0 :(得分:2)

您只在模型Item中定义了关系,但您还必须在模型ItemType中定义它:

class ItemType < ActiveRecord::Base
  has_many :items
end