0

我有 2 个相互关联的模型,每个条目都可以有一个类别。相反,我猜 Category 也可能有很多条目。

class Entry < ActiveRecord::Base
  has_one :category
end

class Category < ActiveRecord::Base
  belongs_to :entry
end

我的两个模型的架构如下所示:

create_table "categories", :force => true do |t|
  t.string   "name"
  t.text     "description"
  t.datetime "created_at",  :null => false
  t.datetime "updated_at",  :null => false
end

create_table "entries", :force => true do |t|
  t.text     "description"
  t.datetime "created_at",  :null => false
  t.datetime "updated_at",  :null => false
  t.text     "address"
  t.float    "longitude"
  t.float    "latitude"
  t.integer  "user_id"
  t.string   "name"
  t.integer  "category_id"
end

我的索引页面基于@entries.all,它当前构建了一个从 Entry 模型中获取的数据数组。我的索引页面显示了 category_id,这很好,但更好的是从 Category 的连接模型中提取名称。

所以如果 entry.category_id 给了我 id 我怎么能得到名字?

4

1 回答 1

1

您的关联看起来不正确。根据您的数据库架构,关系是类别 has_many 条目和条目属于_to 类别。如果从您的模型判断,类别表应该有 entry_id 而不是条目表有 category_id。

要重构,如果您的逻辑是每个条目只允许一个类别,那很容易。

class Entry < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
   has_many :entries
end

# Then `entries` table should have one field `category_id`

# To access an entry's category as per you requested:
@entry.category

如果你的逻辑是一个条目可能有多个条目,你需要使用多对多关系和一个中间表。

于 2013-07-23T12:07:53.147 回答