简单的嵌套表单,但似乎不起作用

时间:2011-02-05 11:04:27

标签: ruby-on-rails-3 nested-forms

我正在尝试构建一个简单的嵌套表单,在线检查大量资源,但找不到我错过的内容! 我有以下内容:

class Configuration < ActiveRecord::Base
  has_many :configoptions
  accepts_nested_attributes_for :configoptions
end

class Configoption < ActiveRecord::Base
  belongs_to :configuration
  has_many :items
end

现在,我正在尝试在选择配置时创建一个简单的表单,以便显示 属于它的配置,但没有任何作用!

这是没有任何HTML的视图

  <%= form_for :config do |f| %>
    <%= f.text_field(:name)%>
    <% f.fields_for @options do |option|%>
    <% end %>
  <% end %>

在控制器中我有:

  def show
    @config = Configuration.find(params[:id])
    @options = @config.configoptions
  end

但我最终收到错误:

undefined method `model_name' for Array:Class

有人对我有建议吗?非常感谢!

4 个答案:

答案 0 :(得分:3)

仅供参考,Ryan Bates(RailsCasts)创造了一个宝石来处理其中的大部分内容。我现在正在使用它并且效果很好!

有关详细信息,请参阅https://github.com/reu/simple_nested_form

答案 1 :(得分:2)

如果您正在使用集合(如数组),则必须指定model_name。

  <%= form_for :config do |f| %>
    <%= f.text_field(:name)%>
    <%= f.fields_for :configoptions, @options do |option|%>
      <%= option.text_field(:some_attribute) %>
    <% end %>
  <% end %>

在fields_for中,我传递两个参数,:configoptions作为模型名称,@options作为要使用的集合。如果向上滚动一半,http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html有很多很好的嵌套属性示例。

或者(以及我个人喜欢的方法)循环访问集合并为每个对象调用fields_for

  <%= form_for :config do |f| %>
    <%= f.text_field(:name)%>
    <% @options.each do |configoption| %>
      <%= f.fields_for configoption do |option|%>
        <%= option.text_field(:some_attribute) %>
      <% end %>
    <% end %>
  <% end %>

答案 2 :(得分:1)

尝试:

class Configuration < ActiveRecord::Base
  has_many :configoptions, :dependent => :destroy
  accepts_nested_attributes_for :configoptions, :allow_destroy => true
end

答案 3 :(得分:0)

您使用过:

<% f.fields_for @options do |option|%>

尝试使用

<%= f.fields_for @options do |option|%>

我有同样的问题,这是通过这个微不足道的想法解决的。