我有两个相互关联的模型,每个条目可以有一个类别。相反,我猜那个类别也可能有很多条目。
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,我怎么能得到这个名字?
答案 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
如果你的逻辑是一个条目可能有多个条目,你需要使用多对多关系和一个中间表。