我有两个模型: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命名了什么?如何保存结果并将它们作为数组存储在列中?或者有更好的方法来解决这个问题吗?
答案 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]返回。
关于如何操作,您应该将此信息返回给您可以处理它的控制器。视图用于显示。控制器可以轻松地构建和处理阵列,以便可以在其决策和/或路由中使用它。