2015-10-23 85 views
1

Stack Overflow上也有類似的問題,例如this onethat one,我試着回答建議,但無法解決我的問題。Rails 4表單:在選擇字段中顯示數據庫值

我有一個Rails形式 - 一個simple_form形式 - 用中的以下我的新觀點:

<div class="field"> 
    <%= f.label :price, "Hourly Rate ($)" %><%= f.select :price, ['10', '20', '30', '40', '50', '60', '70', '80', '90', '100'] %> 
</div> 

然後,我要重新顯示這種形式在我編輯視圖,與這是保存到數據庫中的值,所以我嘗試:

<div class="field"> 
    <%= f.label :price, "Hourly Rate ($)" %><%= f.select :price, ['10', '20', '30', '40', '50', '60', '70', '80', '90', '100'], :selected => current_user.price %> 
</div> 

的問題是,選擇欄顯示的第一個值,而不是一個我期待的。

-----

UPDATE:按照下面給出的答案,我實現了下面的代碼:

<div class="field"> 
    <%= f.label :price, "Hourly Rate ($)" %> 
    <%= f.select :price, [['10', '10'],['20','20'],['30','30'],['40','40'],['50','50'],['60','60'],['70','70'],['80','80'],['90','90'],['100','100']], selected: current_user.price, include_blank: 'Select your price' %> 
</div> 

這似乎並沒有工作。除非我犯了一個錯誤?

-----

任何想法如何使這項工作?

+0

你的表單是否真的綁定了'current_user'? – zwippie

回答

1

你不需要兩個單獨的窗體。

new.html.erbedit.html.erb

把下面:

<%= render 'hourly_rate' %> 

然後在_hourly_rate.html.erb把下面:

<div class="field"> 
    <%= f.label :price, "Hourly Rate ($)" %> 
    <%= f.select :price, options_for_select([['10',1], ['20',2], ['30',3], ['40',4], ['50',5], ['60',6], ['70',7], ['80',8], ['90',9], ['100',10]], @your_obj.price) %> 
</div> 

其中@your_obj.price類似於1,2,3 ......(或者您可以根據實際價格進行修改,如果您願意的話。您只需要更改數組即可rdingly)。

options_for_select方法是一個助手,其第二個參數允許您通過傳遞值來預先選擇一個選項。欲瞭解更多信息,請看docs

1

嘗試:

<div class="field"> 
    <%= f.label :price, "Hourly Rate ($)" %><%= f.select :price, [['10', '10'],['20','20'],['30','30'],['40','40'],['50','50'],['60','60'],['70','70'],['80','80'],['90','90'],['100','100']], selected: current_user.price, include_blank: 'Select your price' %> 
</div> 

你應該通過數組的數組其中左細胞是名稱和右側之一的值,然後傳遞在由值而不是按名稱選擇,應該使用這也在第一種形式:

<div class="field"> 
    <%= f.label :price, "Hourly Rate ($)" %><%= f.select :price, [['10', '10'],['20','20'],['30','30'],['40','40'],['50','50'],['60','60'],['70','70'],['80','80'],['90','90'],['100','100']] %> 
</div> 
相關問題