0

我正在设置一个应用程序来发布想要/可用/易货的物品。我有两个主要类,Post 和 Item。

每个帖子都包含一个 offer_item、一个 Want_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 还是 offer_item)? 这是在迁移文件中还是在模型中完成的?

就目前而言,当我尝试这样的查询时:

Post.find(:first).wanted_item 

我得到以下信息:

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

4

1 回答 1

2

您可以设置关联条件,如下所示:

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

并添加一kindItem(不要使用“类型”,它是保留字)。

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

于 2012-05-23T16:29:06.360 回答