0

我有两个模型: QuestionnaireResult 和 QuestionnaireOption。

选项是动态的。

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

IE

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 取什么名字,如何保存结果并将它们作为数组存储在列中?还是有更好的方法来解决这个问题?

4

1 回答 1

0

看看这个参考,它说:

2.2 将表单绑定到对象

虽然这增加了舒适度,但它远非完美。如果 Person 有许多要编辑的属性,那么我们将多次重复编辑对象的名称。我们想要做的是以某种方式将表单绑定到模型对象,这正是 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 是对象(不一定是模型)的更通用接口。您可以在同一参考资料中看到这一点。举个例子:

<%= 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] 中返回。

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

于 2013-10-02T13:18:06.113 回答