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

时间:2015-09-27 12:53:54

标签: ruby-on-rails models

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

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)。

非常感谢提前!

1 个答案:

答案 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 %>