0

我之前在表单中添加了下拉选择,但无法让它们在索引视图中工作。我已经阅读了有关此的 API,但无法正常工作。

基本上,我在索引视图中有一个所有任务的列表。我在迁移中将数据库中的默认值设置为“否”。我希望能够遍历所有任务并显示一个下拉选择,其中包含选项 no、yes 和部分。然后我希望能够让数据库在选择时更新该任务的字段。

我无法让下拉菜单工作 - 每当我尝试使用 task.select 时,它都会说 select 是一种私有方法。抱歉,我对 Rails 还很陌生 - 任何人都可以提供的任何帮助都会很棒!如何使下拉菜单起作用,如何确保在更改值时更新数据库?

谢谢!

查看代码(这是我到目前为止所拥有的) - 任务/索引:

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

如果是 ("No", "Yes", "Partly") 中的字符串

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

为了能够对您的模型进行更改,您当然需要以某种方式提交表单。您可以对所有记录使用一种表格:

  1. 一个提交按钮:您需要更改表单和更新控制器以接收多个任务
  2. 每个任务的表单带有多个提交按钮:您的用户每次更改类别时都需要提交
  3. 每次用户更改类别时使用 AJAX 提交。

祝你好运

于 2012-07-03T10:41:04.673 回答