Ruby on rails “助手”;字段“U代表”的;不起作用
我正在使用嵌套属性,但字段未加载到我的视图中。 有人知道我错过了什么吗 Rails 3.1、Ruby 1.9.2 模式1: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
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