我有一个内容模型,其中包含一个或多个音频文件,需要通过新/编辑表单添加。 我所做的是用这种关系创建模型:
class Audio < ActiveRecord::Base
belongs_to :content
has_attached_file :audiofile,
end
class Content < ActiveRecord::Base
...
has_many :audios
accepts_nested_attributes_for :audios, :allow_destroy => true
end
现在,在我的新内容表单中,我有以下内容:
<% f.fields_for :audios do |audiof| -%>
<%= f.label :audiofile, 'Audio file:' %>
<%= audiof.file_field :audiofile %>
<% end -%>
我需要它做的是向我展示file_field仅用于新的音频文件,对于现有的文件,只需打印一个文件大小,名称和可能的删除按钮。
我还在控制器中创建了一条新记录:
@content.audios.build
我正在使用Rails 3.0.3和Paperclip插件进行上传。对不起,如果问题太苛刻了。
感谢。
答案 0 :(得分:0)
从我的记忆中,你将能够在fields_for语句中访问该对象的实例。
尝试类似的东西:
<% f.fields_for :audios do |audiof| -%>
<% if audiof.object.new_record? %>
<%= f.label :audiofile, 'Audio file:' %>
<%= audiof.file_field :audiofile %>
<% else %>
<%= "Filename = #{audiof.object.audiofile.filename}" %>
<%= "url = #{audiof.object.audiofile.url}" %>
<% end %>
<% end -%>
如果audiof.object返回nil(在这种情况下,它不是好名字),请通过显示所有公共方法<% = raise audiof.public_methods.inspect %>
object方法应返回Audio类的实例。