53

我創建一個腳手架 -如何在軌道形式下降<select>字段?

rails g scaffold Contact email:string email_provider:string 

,但我想要的電子郵件提供商是一個下拉(與Gmail /雅虎/ MSN的選項),而不是文本字段。我怎樣才能做到這一點 ?

回答

67

你可以看看the Rails documentation。不管怎麼說,在您的形式:

<%= f.collection_select :provider_id, Provider.order(:name),:id,:name, include_blank: true %> 

正如您可以猜到,你應該預先定義電子郵件提供商在另一種模式 - Provider,有從哪裏選擇。

+0

所以模型將是contact.rb,但我應該在哪裏放下邏輯?對於天真的問題抱歉,我是RoR開發新手 – iCyborg

+0

您的問題確定。如果你看看'app/views/contacts'的結構,你會發現一個'_form.html.erb'文件。你可以嘗試把它放在那裏。這個「部分視圖」負責創建和更新您生成的腳手架的操作。 –

+3

建議將訂單(:名稱)移動到模型中的作用域(這是一種方法)。這裏沒有什麼大不了的,但隨着時間的推移,你會發現,視圖模板上的基本業務邏輯(排序)變成了一團糟。將它移動到控制器,或者理想的模型,並在那裏使用可用的範圍。舉一個例子 - 如果最終有三個使用下拉菜單的屏幕或模板,則在視圖中排序意味着3 X重複。把它放在模型中意味着它被定義在一個地方,這是改變它的唯一好地方。 –

3

請看看here

要麼你可以使用軌道標籤或使用普通的HTML標籤

Rails的標籤

<%= select("Contact", "email_provider", Contact::PROVIDERS, {:include_blank => true}) %> 

* 上面的代碼將成爲行HTML代碼(HTML標籤),找到它下面*

HTML標籤

<select name="Contact[email_provider]"> 
    <option></option> 
    <option>yahoo</option> 
    <option>gmail</option> 
    <option>msn</option> 
</select> 
+0

感謝,我仍然困惑,我理解