2016-02-16 69 views
1

我有關聯到我的分類
現在我有一個形式,我要創建的頁面導軌 - 的form_for選擇從數據庫

<%= form_for @page do |f| %> 

<table> 
    <tr> 
     <td><%= f.label :title %></td> 
     <td><%= f.text_field :title %></td> 
    </tr> 
    <tr> 
     <td><%= f.label :desc %></td> 
     <td><%= f.text_field :desc %></td>   
    </tr> 
    <tr> 
     <td><%= f.label :category_id %></td> 
     <td><%= f.select(Page.all, :category_id, :title) %></td>    
    </tr>   
</table>  

<%= f.submit %> 


<% end %> 

我試圖創建一個選擇下拉菜單的網頁上顯示我的類別將顯示我從我的數據庫中獲得的所有類別,選擇一個後,它會將我創建的頁面分配給我從選擇下拉列表中選擇的類別

+0

那麼是什麼問題? –

回答

2

您應該使用

f.select :category, Category.pluck(:title, :id) 

要知道,如果你的軌道版本是情人,是4.x的,你只能使用pluck有一列。

+0

應該指出的是,在Rails 4之前,你只能在一列中使用'pluck'。 – jvnill

+0

@jvnill編輯,thx! –

+0

如何在我提交表單時將創建的頁面分配給所選類別? – user4571629

1

您需要更改您的選擇標記根據這個。

<%= form_for @page do |f| %> 

<table> 
<tr> 
    <td><%= f.label :title %></td> 
    <td><%= f.text_field :title %></td> 
</tr> 
<tr> 
    <td><%= f.label :desc %></td> 
    <td><%= f.text_field :desc %></td>   
</tr> 
<tr> 
    <td><%= f.label :category %></td> 
    <td><%= f.select(:category_id, options_from_collection_for_select(Category.all, :category_id, :title)) %></td>    
</tr>   

+0

顯示我的網頁,但我想要一個我的類別列表 – user4571629

+0

哎呀!是啊,你說得對。我已經更新了答案。 – Rubysmith

0

對於Rails3中(或可能更少),如果你一個Category模型,你可以簡單地做。

f.select(:category, Category.select([:id,:title]).map { |c| [ c.id, c.title ] } , { include_blank: true }) 
+0

使用Ruby進行數據庫處理是非常糟糕的主意。 –

+0

@AndreyDeineko我不知道,我經常這樣做。你在幕後使用'pluck'也是'ruby'不是嗎......這只是一種簡短的方法。 – Minato

+0

['pluck'](http://apidock.com/rails/ActiveRecord/Calculations/pluck)在數據庫上運行。你的解決方案將在任何計算之前加載整個類別的集合,並且如果有大量的線索集合,這很容易導致內存過載。 –

0

collection_select是你所需要的:

<%= form_for @page do |f| %> 
    <%= f.collection_select :category_id, Category.all, :id, :title %>   
    <%= f.submit %> 
<% end %>