2012-07-03 14 views
0

我已經將下拉選擇添加到表單之前,但無法讓他們在索引視圖中工作。我已經閱讀了這個API並且無法獲得任何工作。Rails - 添加一個下拉選擇索引與數據庫更新

基本上,我已經得到了索引視圖中所有任務的列表。我將數據庫中的默認值設置爲「否」。我希望能夠循環執行所有任務,並在選項「否」,「是」和「部分」中顯示下拉選擇。然後,我希望能夠在創建時使用該選項更新該任務的字段。

我不能讓下拉工作 - 每當我嘗試使用task.select時,它說select是一個私有方法。我很抱歉,我對鐵軌相當陌生 - 任何人可以提供的幫助都會很棒!如何讓下拉菜單起作用,以及如何確保在數值更改時數據庫得到更新?

謝謝!

查看代碼(這裏是我迄今爲止) - 任務/指數:

<table class="table table-striped table-bordered"> 
    <tr> 
    <th>Name</th> 
    <th>Category</th> 
    <th>Notes</th> 
    <th>Completed?</th> 
    <th></th> 
    <th></th> 
    <th></th> 
    </tr> 

<% @tasks.each do |task| %> 
    <tr> 
    <td><%= task.name %></td> 
    <td><%= task.category %></td> 
    <td><%= task.notes %></td> 
    <td><%= task.select :complete, ['No','Yes','Partly'], :selected => 'No' %></td> 
    <td><%= link_to 'Show', task %></td> 
    <td><%= link_to 'Edit', edit_task_path(task) %></td> 
    <td><%= link_to 'Delete', task, confirm: 'Are you sure?', method: :delete %></td> 
    </tr> 
<% end %> 
</table> 

UPDATE:

更多的研究後,我已經改變的代碼行:

<td><%= task.select :complete, ['No','Yes','Partly'], :selected => 'No' %></td> 

至:

<% form_for task do |f| %> 
    <td><%= select :task, :complete, [ ["Yes",2], ["Partly",1], ["No",0]] %></td> 
<% end %> 

當我嘗試加載頁面時,這已經停止了拋出錯誤,但是,'表'應該沒有什麼地方 - 並且源代碼中沒有任何內容,這些行將被跳過。如何獲得此表單以及如何在選擇更改時更改數據庫?謝謝!

回答

0

假設Post::CATEGORIES = ["No", "Yes", "Partly"]

這取決於你如何存儲task.category在你的數據庫。

如果是在一個整數(0,1,2)

form_for task do |f| 
    f.select :category, Post::CATEGORIES.map { |c| [c, Post::CATEGORIES.index(c)] }, :selected => task.category, :include_blank => true 
end 

如果是的( 「否」, 「是」, 「晴」)的字符串

form_for task do |f| 
    f.select :category, Post::CATEGORIES, :selected => task.category, :include_blank => true 
end 

爲了能夠對模型進行更改,您當然需要以某種方式提交表單。你可以使用一種形式的所有記錄有:

  1. 一個提交按鈕:你需要改變表單,您的更新控制器接收多個任務
  2. 每一個任務的形式多個提交按鈕:您的用戶需要在每次更改類別時提交
  3. 每次用戶更改類別時使用AJAX提交。

好運

+0

謝謝 - 我結束了使用AJAX的方式 - 以防其他人發現它有用,我使用了最好的地方寶石,說明在這裏:http://railscasts.com/episodes/302-in-place-editing – ecs

0

我認爲你要找的是form_for,然後是f.select。你需要先創建表單,然後f.select是下拉菜單。事情是這樣的:

form_for task do |f| 
    f.select("task", "category", Post::CATEGORIES, {:include_blank => true}) 
end 

與選項列表的替代郵政::類別的下拉

+0

嗨,這給我的錯誤:未定義的方法'合併」的[ 「否」, 「是」, 「晴」]:數組。我把代碼行寫成:<%= f.select(「task」,「complete」,['No','Yes','Partly'])%>我可以在循環遍歷任務?此外,這會自動更新數據庫沒有提交按鈕?謝謝。 – ecs

相關問題