将提交中的多个字段连接到单个数组/字段中

时间:2013-10-02 09:07:42

标签: ruby-on-rails ruby ruby-on-rails-3.2

我有两个模型:QuestionnaireResult和QuestionnaireOption。

选项是动态的。

QuestionnaireResult有两列:date_submitted和results。我希望结果列是QuestionnaireOption的某种数组及其值......

option_id / value
1 / 50
2 / false
3 / true

我使用此表单提交数据,但是它不完整且无效,因为我不知道给text_fields (undefined method 'not_sure_what_to_name_this' for #<Admin::QuestionnaireResult:0x4a5ef9>提供什么名称):

<%= form_for(@questionnaire_result) do |f| %>
  <% if @questionnaire_result.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@questionnaire_result.errors.count, "error") %> prohibited this questionnaire_result from being saved:</h2>

      <ul>
      <% @questionnaire_result.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

    <% @questionnaire_options.each do |questionnaire_option| %>
        <% if questionnaire_option.field_type == 'Textbox' %>
            <div class="field">
                <%= f.label questionnaire_option.option %><br />
                <%= f.text_field :not_sure_what_to_name_this %>
            </div>
        <% elsif questionnaire_option.field_type == 'Checkbox' %>
            <div class="field">
                <%= f.label questionnaire_option.option %><br />
                <%= f.check_box :not_sure_what_to_name_this %>
            </div>
        <% end %>
    <% end %>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我给text_field命名了什么?如何保存结果并将它们作为数组存储在列中?或者有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

查看this reference,其中包含:

  

2.2将表单绑定到对象

     

虽然这增加了舒适度,但远非完美。如果是人   有许多属性要编辑然后我们将重复的名称   多次编辑对象。我们想要做的是以某种方式将表单绑定到   一个模型对象,它正是form_for所做的。

继续展示示例并详细说明讨论。因此,您在form_for中使用的字段是该模型的字段。要显示示例,请在:

<%= form_for Feed.new, id: "feed_add"  do |f| %>
    <%= f.submit "Add Feed", class: 'formlabel' %>
    <%= f.text_field :feed_url, class: 'forminput', :autocomplete => :off  %>
<% end %>

模型是Feed,text_field是:feed_url,因此更新了Feed.feed_url。它以params [:feed] ['feed_url']返回给控制器。

如果你能展示你的模特,我可以进一步提出建议。

要跟进你的问题的另一部分,“我如何保存结果并将它们作为数组存储在列中?还是有更好的方法来解决这个问题?”,这有点不同。

如果你想要做的是构建一个数组,你可能想使用form_tag而不是form_for。 form_for专门用于模型。 form_tag是对象的更通用的接口,不一定是模型。你可以在同一个reference中看到它。举个例子:

<%= form_tag feeds_path, method: 'get', id: "feed_search" do %>
    <%= submit_tag "  Search  ", feed_url: nil, class: 'formlabel' %>
    <%= text_field_tag :search, params[:search], class: 'forminput', :autocomplete => :off  %>
<% end %>

这里,值为:search以params [:search]返回。

关于如何操作,您应该将此信息返回给您可以处理它的控制器。视图用于显示。控制器可以轻松地构建和处理阵列,以便可以在其决策和/或路由中使用它。