Ruby on rails “助手”;字段“U代表”的;不起作用

Ruby on rails “助手”;字段“U代表”的;不起作用,ruby-on-rails,ruby-on-rails-3,haml,helpers,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Haml,Helpers,Ruby On Rails 3.1,我正在使用嵌套属性,但字段未加载到我的视图中。 有人知道我错过了什么吗 Rails 3.1、Ruby 1.9.2 模式1: class Traditions::Material < ActiveRecord::Base has_one :material_asset, :dependent => :destroy validates_presence_of :title accepts_nested_attributes_for :material_asset end

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

Rails 3.1、Ruby 1.9.2

模式1:

class Traditions::Material < ActiveRecord::Base
  has_one :material_asset, :dependent => :destroy
  validates_presence_of :title
  accepts_nested_attributes_for :material_asset
end
结果HTML(部分):



在上面的中,
div.field
是空的。

我无法检查,但是类似这样的东西

- 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

我从您的操作中偶然发现了这一点,它似乎没有在您的
新操作中构建嵌套资源

您是否正在控制器中调用
生成材料\u资产
?这可以解释为什么字段没有被渲染。如果嵌套对象为
nil
,则没有要为其渲染字段的对象

试着这样做:

class MaterialsController < ApplicationController
  def new
    @material = Traditions::Material.new
    @material.build_material_asset
  end
end
class MaterialsController
的字段\u具有新语法

= fields_for :plan, @plan do |builder| ...
在控制器中(新操作):


阅读更多信息:

=
是正确的,你可以在这里看到:但我认为这并不重要。无论如何,我都测试过了,但仍然不起作用。你的链接是erb的,但你是用haml写的。你真的得到你发布的结果了吗?是的,太奇怪了,正是这个
f.fields\u for:material\u asset
返回了0个对象,没有循环。旁注:你不需要在Rails 3.1中指定multipart true。当你在表单中有一个文件字段时,它会自动添加。这太酷了。谢谢你的提示!:)这听起来绝对是最有可能的情况。太好了!我在我的网站上的一个附加页面上使用了一个表单部分,但是字段的字段丢失了,这完全让我困惑。。。。。。直到我找到这根线。问题解决了,谢谢。以前添加为带有拼写错误的编辑,但为了便于参考,我再次将其放在这里:当使用
has\u many
时,您必须使用
@material.material\u assets.build
构建一个实例,如果我提供了有效的信息,为什么我要投反对票?
- 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'
class MaterialsController < ApplicationController
  def new
    @material = Traditions::Material.new
    @material.build_material_asset
  end
end
= fields_for :plan, @plan do |builder| ...
@plan = Parent.plans.new