2015-09-27 131 views
1

我正在挑戰自己建立一個小市場,您可以在類別中發佈「請求」。爲此我有請求模型和類別模型。如何在這些模型之間添加關係,以便該類別知道它屬於請求,反之亦然?我已經做了:Ruby on Rails:兩種模式之間的關係

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> 

我的類別表:

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

我如何可以調用類的具體請求,何時保存? @Category.request

我真的很困惑(對不起,我從8月下旬才學習Rails)。

很多感謝提前!

回答

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?

要獲得類別,你必須從這樣的例子請求啓動specifc要求:

@request = Request.first 
@reqest.category 

在你的表格你可能接下來要使用category_id,如果你想使用select標籤是這樣的:

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

該地圖將確保它將使用標籤的名稱和您選擇的值的id。

爲了使關聯和其他東西的生成表格更容易,您還可以查看寶石simple_form。那麼你所要使用的是:

<%= f.association :category %> 
+0

非常感謝! – CottonEyeJoe