我正在尝试构建一个简单的嵌套表单,在线检查大量资源,但找不到我错过的内容! 我有以下内容:
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
有人对我有建议吗?非常感谢!
答案 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|%>
我有同样的问题,这是通过这个微不足道的想法解决的。