帮助者“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
吗?