如何访问关联模型中的字段?

时间:2013-07-23 11:33:04

标签: ruby-on-rails-3.2 rails-activerecord

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

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,我怎么能得到这个名字?

1 个答案:

答案 0 :(得分:1)

您的关联看起来不正确。根据您的db模式,关系是Category has_many条目,Entry是belongs_to Category。如果从模型判断,则categories表应该具有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

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