0

介绍

我有一个对象@organization,它 has_many :quick_facts

基本上,我想为每个 :quick_fact 生成一个 _form,但有一个保存按钮,可以保存所有的 quick_facts。

我的两个问题:

第一个问题:

我的 quick_facts 没有预先填充他们的信息。对于我拥有的每个 quick_fact,它们仅显示为空白。

第二个问题

每个表单上都会出现一个保存按钮

我悲伤的尝试:

- for quick_fact in @organization.quick_facts
 - fields_for :quick_facts do |f|
   = f.error_messages :header_message => FORM_ERROR_HEADER_MESSAGE, :message => FORM_ERROR_MESSAGE
   = f.label :quick_fact, 'QuickFact'
   %br/
   = f.select :quick_fact, QUICK_FACTS, {}
   %br/
   = f.submit 'save', :class => 'button'
4

1 回答 1

1

您真的只需要一个表格,因为您想一次提交所有内容。

以下是我的建议:

使用部分渲染标签和快速事实的文本选项(如果您希望它是文本)。您希望每个快速事实都呈现此部分内容,因此请使用 render 方法上的 :collection 选项来指定快速事实的集合。每个部分都将获得您所在的任何 quickfact 的本地副本,并且还将创建一个名为 quickfact_counter 的变量。

此外,您将需要使用 :locals 选项将表单作为局部变量传递给局部变量,以便您可以执行 f.label、f.text_area

因此,总而言之,您的新表单将如下所示:

<% form_for @organization do |form| %>
  <%= render :partial => "partial_name", :collection => @organization.quick_facts, :locals => {:form => form} %>
  <%=form.submit 'save', :class => 'button'%>
<% end %>

然后你的部分将只有

<%= form.label :quick_fact, 'QuickFact' %>
<%= form.text_field :quick_fact %>

如果你想变得更漂亮,你可以使用布局来呈现表单并让它遵循部分,但这应该足以让你开始。能够将集合传递给部分是我最喜欢的 Rails 功能之一。

于 2010-08-12T18:30:50.850 回答