2010-03-17 71 views
0

我有一個巫婆形式的用戶可以添加他們的工作時間查看他們並編輯他們(所有在一個頁面中)。在添加工作時間時,用戶必須從下拉列表中選擇一個項目。如果操作正在添加新的小時記錄,則下拉欄應保持空白(未選中),以防編輯操作時應使用適當的值選擇下拉欄。 爲了克服這一挑戰,我寫了下面的代碼ruby​​ on rails-問題與選擇表單助手

<% if params[:id].blank?%> 
    <select name="hour[project_id]" id="hour_project_id"> 
     <option value="nil">Select Project</option> 
     <% @projects.each do|project|%> 
      <option value="<%=project.id %>"><%=project.name%></option> 
     <% end%> 
    </select> 
<% else %> 
    <%= select('hour','project_id', @projects.collect{|project|[project.name,project.id]},{:prompt => 'Select Project'})%> 
<% end %> 

因此,在攢動,我做了下拉列表中僅使用HTML的情況下,並且在編輯操作的情況下,我與收集方法做到了。它工作正常,直到我試圖編碼的錯誤。問題是,當我使用錯誤方法:validates_presence_of:project_id時,它無法在下拉列表的html表單中識別它,並且不顯示錯誤消息(它僅適用於使用collect方法的下拉菜單)。

我會深深體會到您的指示,在這個問題上幫助

回答

1

options_from_collection_for_select(收集,value_method,text_method,選擇=無)是你的朋友:

<%= select('hour','project_id', options_from_collection_for_select(@projects, :id, :name, @hour.project_id),{:prompt => 'Select Project'})%> 

如果有@hour對象,它是新的,因此沒有project_id,值將爲零,並且不會選擇任何內容 - 或者,將選擇@hour的值。

+0

它沒有爲我工作。也許是因爲我所有的操作都是在一個頁面上完成的當用戶選擇項目並點擊保存按鈕時,他會再次被重定向到同一頁面。當我嘗試了你的建議 <%= select('hour','project_id',options_from_collection_for_select(@projects,:id,:name,@ hour.project_id,),{:prompt =>'Select Project'})%> 總是選擇下拉列表。 – 2010-03-18 08:04:33

+0

我終於明白我的問題,看起來在執行創建操作之後,我沒有打電話給@ hour = Hour。新的 所以當表單頁面被重新加載時,它重載了Hour.new(params [:hour])。我將它更改爲@ hour = Hour.new並且它正在工作!!!!!! – 2010-03-21 09:06:17