我正在挑战自己建立一个小市场,在那里你可以在一个类别中发布“请求”。为此我同时拥有请求模型和类别模型。如何在这些模型之间添加关系,以便类别知道它属于请求,反之亦然?我已经做了:
category.rb
has_one :category
request.rb
<%= 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
但上面的:name
代码显示了这一点:
种子文件中有6个类别,但不是类别的实际名称(如“PHP”)。如果我在此代码中使用:category
而不是<%= f.select :category, Category.all, :prompt => "Kategorie", class: "form-control" %>
:
undefined method `name' for #<Request:0x007ff504266b40>
我正在
Category(id: integer, name: string, description: text, created_at: datetime, updated_at: datetime)
我的分类表:
@Category.request
如何保存特定请求的类别? DB::raw('concat(DATE_FORMAT(starts_on, "%d %b %Y %h:%i %p"), " ", timezone) as starts')
?
我真的很困惑(抱歉,我从8月下旬开始学习Rails)。
非常感谢提前!
答案 0 :(得分:1)
如果我理解正确,因为在一个请求属于一个类别而一个类别可以有多个请求,关联应该设置如下:
class Request < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :requests
end
像这样,请求表中的条目将具有类别的外键category_id。
您还可以在Active Record Associations Guide
中阅读很多关于关联基础知识的内容如何保存特定请求的类别? @ 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 %>