Ruby on Rails:两个模型之间的关系

Ruby on Rails: Relation between two models

我正在挑战自己建立一个小型市场,您可以在其中 post 一个 "request" 类别。为此,我同时拥有请求模型和类别模型。我如何在这些模型之间添加关系,以便类别知道它属于请求,反之亦然?我已经做了:

category.rb

has_and_belongs_to_many :requests 

request.rb

has_one :category

现在在我的部分表格中我有这个代码:

<%= f.select :category, Category.all, :prompt => "Kategorie", class: "form-control" %>

奇怪的是 :category 不存在,因为列应该是 :name。在我的 seeds.rb 中,我插入了以下内容,在 rake db:seed

之后运行良好
Category.create(name: 'PHP')

Category.create(name: 'Ruby')

Category.create(name: 'HTML')

Category.create(name: 'ASP')

Category.create(name: 'C#')

Category.create(name: 'C++')

但是上面带有 :category 的代码显示了这一点:

种子文件中有所有 6 个类别,但不是类别的实际名称(如 "PHP")。如果我在此代码中使用 :name 而不是 :category

<%= f.select :category, Category.all, :prompt => "Kategorie", class: "form-control" %>

我得到一个

undefined method `name' for #<Request:0x007ff504266b40>

我的分类table:

Category(id: integer, name: string, description: text, created_at: datetime, updated_at: datetime)

保存后如何调用特定请求的类别? @Category.request?

我真的很困惑(抱歉我是从 8 月下旬才开始学习 Rails)。

非常感谢!

如果我没理解错的话,一个请求属于一个类别,一个类别可以有多个请求,关联应该这样设置:

class Request < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :requests
end

像这样,请求 table 中的条目将具有该类别的外键 category_id。

您还可以在 Active Record Associations Guide

中阅读很多关于关联的基础知识

How can I call the category for a specific request, when it's saved? @Category.request ?

要获取特定请求的类别,您必须从请求开始,例如:

@request = Request.first
@reqest.category

在你的表单中,如果你想像这样使用 select 标签,你可能必须使用 category_id

<%= f.select :category_id, Category.all.map { |c| [c.name, c.id] }, :prompt => "Kategorie", class: "form-control" %>

地图将确保它将使用标签的名称和您 select 中值的 ID。

为了更轻松地为协会和其他内容生成表单,您还可以查看 gem simple_form。那么你所要做的就是:

<%= f.association :category %>