0

以前にドロップダウン選択をフォームに追加したことがありますが、インデックス ビューで機能させるのに問題があります。これに関する API を読みましたが、何も機能しません。

基本的に、インデックス ビューにすべてのタスクのリストがあります。移行でデータベースのデフォルトを「いいえ」に設定しました。私はすべてのタスクをループして、ドロップダウンの選択をオプション no、yes、partly とともに表示できるようにしたいと考えています。次に、タスクが作成されたときにそのタスクのフィールドを選択して更新できるようにしたいと考えています。

ドロップダウンを機能させることができません - 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>

アップデート:

さらに調査した結果、コード行を次のように変更しました。

<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 %>

これにより、ページをロードしようとするとエラーが発生しなくなりましたが、「フォーム」があるべき場所がなく、ソースコードにも何もないため、これらの行はスキップされます。このフォームを表示するにはどうすればよいですか?また、選択が変更されたときにデータベースを変更するにはどうすればよいですか? ありがとう!

4

2 に答える 2

0

あなたが探しているのはform_forそしてf.selectだと思います。最初にフォームを作成する必要があります。次に、f.selectがドロップダウンです。このようなもの:

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

Post::CATEGORIESをドロップダウンのオプションのリストに置き換えます

于 2012-07-03T06:45:54.007 に答える
0

仮定Post::CATEGORIES = ["No", "Yes", "Partly"]

task.categoryDBへの保存方法によって異なります。

(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つのフォームを使用できます。

  1. 1つの送信ボタン:複数のタスクを受け取るには、フォームと更新コントローラーを変更する必要があります
  2. 複数の送信ボタンを備えたタスクごとのフォーム:ユーザーは、カテゴリを変更するたびに送信する必要があります
  3. ユーザーがカテゴリを変更するたびに、AJAXを使用して送信します。

幸運を

于 2012-07-03T10:41:04.673 に答える