提交表格形式并将哈希值传递给控制器

时间:2014-10-21 15:10:18

标签: ruby-on-rails redmine redmine-plugins

我开始开发一个简单的Redmine插件,允许用户编辑和保存特定的Redmine Issue自定义字段。我是Rails的新手,也是编写Redmine插件的新手,所以请原谅我这是一个非常简单易用的问题。

到目前为止我所拥有的是一个表格,其中显示了给定产品和版本的问题以及其他自定义字段。请看这里的图片:

changelog table

我想要做的是更改自定义字段"注意说明" (在文本区域内)当我点击"保存更改"每当单击给定行的复选框时,我想向控制器发送包含此表单所有字段的哈希值(包括问题ID和问题说明说明)。然后,控制器将接收给定发行号的新描述并更新问题字段"注意说明"使用用户输入的新字符串。

以下是相关的代码段。

index.html.erb:

<h3>Changelog</h3>
<table>
  <%= form_tag(controller: "polls", action: "save", method: "get",
    project_id: @project, id: @version_selected_combo) do %>
  <tr>
    <th class="checkbox"></th>
    <th class="tracker">Tracker</th>
    <th class="issue">Issue ID</th>
    <th class="status">Status</th>
    <th class="description">Note Description</th>
    <th class="subject">Subject</th>
  </tr>
  <% @improvement_issues.each_with_index do |issue, index| %>
  <tr>
    <td class="checkbox"><%= check_box_tag 'issue_checkbox' %></td>
    <td class="tracker"><font color="LimeGreen">
      <%= issue.to_s.split(' ').at(0) %></font></td>
    <td class="issue">
      <%= label_tag(:issue_id, issue.to_s.split(' ').at(1)[1..-2]) %></td>
    <td class="status"><%= @improvement_issues_descriptions[index]  %></td>
    <td class="description">
      <%= text_area_tag(:transfer_note_description,
                        @transfer_notes_descriptions[index], 
                        :cols => "100", :rows => "1") %></td>
    <td class="subject"><%= sanitize issue.to_s.partition(': ')[2] %></td>
  </tr>
  <% end %>
  <tr>
    <td><%= submit_tag("Save changes") %></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <% end %>
</table>

正如您所看到我在表格中使用表格助手,我不知道这是否是正确或更好的方法。

polls_controller.rb:

def save
  p params
end

这只是在点击&#34;保存更改&#34;之后调用的方法。按钮。

如果我选中这两个复选框,我得到的日志如下:

[ 2014-10-21 15:55:21.2754 21609/7f0234d4e700 Pool2/Implementation.cpp:1291 ]: [App 21695 stdout] {"utf8"=>"✓", "issue_checkbox"=>"1", "transfer_note_description"=>"description for the note here", "commit"=>"Save changes", "id"=>"trunk", "method"=>"get", "project_id"=>"sandbox", "action"=>"save", "controller"=>"polls"}

我无法向控制器发送说明说明和发号码。

我没有模型,因为我不需要一个模型,因为所有数据都已经在redmine数据库中。当用户提交表单时,我希望控制器获取带有问题编号和问题说明描述的哈希值。

我想尽可能多地使用rails,因此,如果我能避免使用它,我就不想使用javascript。

欢迎任何帮助。提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我犯了两个错误:

  1. 我选择了错误的表格助手;
  2. 我将表单数据分成不同的表格元素(虽然未在原始代码段中显示)。
  3. 我的解决方案是替换以下表单助手:

    1. 从checkbox_tag到check_box
    2. 从label_tag到text_field_tag
    3. 从text_area_tag到text_area
    4. 进行这些更改后,我可以很容易地在控制器收到的参数上看到用户刚刚在视图上更改的所有表单数据。

      此外,最初的form_tag元素现在在所有表元素之外(我现在只有1个表),这样我就可以捕获用户更改的所有表单字段,如下所示:

      <%= form_tag(controller: "polls", action: "save", project_id: @project, id: @version_selected_combo) do %>
       <table>
       (...)
       all the form elements ...
       (...)
       </table>
      <% end %>