助手“fields_for”不工作
我正在使用嵌套属性,但这些字段未加载到我的视图中。 有人知道我错过了什么吗?
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
模型 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 class='field'></div>
<div class='buttonrow'>
<input name="commit" type="submit" value="Save" />
</div>
在上面,div.field
为空。
I'm using nested attributes, but the fields aren't loaded in my view.
Someone know what I missing?
Rails 3.1, Ruby 1.9.2
Model 1:
class Traditions::Material < ActiveRecord::Base
has_one :material_asset, :dependent => :destroy
validates_presence_of :title
accepts_nested_attributes_for :material_asset
end
Model 2:
class Traditions::MaterialAsset < ActiveRecord::Base
belongs_to :material
has_attached_file :asset
validates_attachment_presence :asset
end
View (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'
Result HTML (part):
<div class='field'></div>
<div class='buttonrow'>
<input name="commit" type="submit" value="Save" />
</div>
In above, div.field
is empty.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我从您的rails问题中偶然发现了这一点,它似乎没有在中构建嵌套资源您的
新
操作。您是否在控制器中调用
build_material_asset
?这可以解释为什么字段没有被渲染。如果嵌套对象为nil
,则没有要为其渲染字段的对象。尝试这样的事情:
I stumbled across this from your rails issue, which appears to be not building the nested resource in your
new
action.Are you calling
build_material_asset
in your controller? That could explain why the fields aren't getting rendered. If the nested object isnil
, there are no object to render fields for.Try something like this:
fields_for 有新语法。
在控制器中(新操作):
在此处阅读更多信息: http: //api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for
fields_for has new syntax.
in controller (action new) :
read more here: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for
我无法检查,但类似这样的事情?
问题是您嵌套了
=
。您应该使用-
进行外部迭代。另外,您确定.field
有效吗?不是应该是#field
吗?I cannot check, but something like this?
The problem is that you have nested
=
. You should use-
for the outer iterations. Also, are you sure that.field
works? Isn't it supposed to be#field
?