帮助者“fields_for”无法正常工作

我正在使用嵌套属性,但我的视图中未加载字段。 有人知道我错过了什么吗?

Rails 3.1,Ruby 1.9.2

型号1:

class Traditions::Material  :destroy validates_presence_of :title accepts_nested_attributes_for :material_asset end 

型号2:

 class Traditions::MaterialAsset < ActiveRecord::Base belongs_to :material has_attached_file :asset validates_attachment_presence :asset end 

查看(HAML):

 = form_for @material, :html => {:class => 'form', :multipart => true} do |f| = errors_for @material .field = f.label :title = f.text_field :title .field = f.label :description = f.text_area :description, :rows => 5 .field = f.fields_for :material_asset do |ma| = ma.label :asset = ma.file_field :asset .buttonrow = f.submit 'Save' 

结果HTML(部分):

 

在上面, div.field是空的。

我偶然发现了你的rails问题 ,这似乎没有在你的new动作中构建嵌套资源。

你在控制器中调用build_material_asset吗? 这可以解释为什么字段没有得到渲染。 如果嵌套对象为nil ,则没有对象呈现字段。

尝试这样的事情:

 class MaterialsController < ApplicationController def new @material = Traditions::Material.new @material.build_material_asset end end 

fields_for具有新语法。

 = fields_for :plan, @plan do |builder| ... 

在控制器中(动作新):

 @plan = Parent.plans.new 

在这里阅读更多: http : //api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

我无法检查,但这样的事情?

 - form_for @material, :html => {:class => 'form', :multipart => true} do |f| = errors_for @material #field = f.label :title = f.text_field :title #field = f.label :description = f.text_area :description, :rows => 5 #field - f.fields_for :material_asset do |ma| = ma.label :asset = ma.file_field :asset .buttonrow = f.submit 'Save' 

问题是你有嵌套= 。 你应该使用-用于外部迭代。 另外,你确定.field有效吗? 它不应该是#field吗?