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 %>
我正在挑战自己建立一个小型市场,您可以在其中 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 %>