设置具有多个has_one关系的外键

时间:2012-05-23 16:02:48

标签: ruby-on-rails foreign-keys

我正在设置一个应用程序,用于发布想要/可用/易货的项目。我有两个主要的课程,Post和Item。

每个帖子都包含offers_item,wanted_item或两者。以下是我目前的定义:

class Post < ActiveRecord::Base
  has_one :wanted_item, :class_name => 'Item', :dependent => :destroy
  has_one :offered_item, :class_name => 'Item', :dependent => :destroy
  has_one :location, :dependent => :destroy
end

class Item < ActiveRecord::Base
  belongs_to :post

  attr_accessible :title, :description
end

关于我的问题:我如何构建Items表中的外键,以便我可以判断哪个帖子(以及是否是wanted_item或provided_item)?这是否在迁移文件中完成还是在模特中?

目前的情况是,当我尝试查询时:

Post.find(:first).wanted_item 

我得到以下内容:

  

SQLite3 :: SQLException:没有这样的列:items.post_id:SELECT   “items”。* FROM“items”WHERE“items”。“post_id”= 1 LIMIT 1

1 个答案:

答案 0 :(得分:2)

您可以为关联设置条件,例如:

has_one :wanted_item, :class_name => 'Item', :conditions => ['kind = ?', 'wanted']

并向kind添加Item列(请勿使用“type”,这是保留字)。

编辑:再次阅读你的帖子,你的Item表似乎缺少外键。在创建Item表的迁移文件中,只需包含t.references :post以使rails创建post_id外键列。