2011-01-09 6 views
1

У меня есть модель контента, в которой есть один или несколько аудиофайлов, которые необходимо добавить новой/редактируемой формой. То, что я сделал это создал модель с этим соотношением:Rails 3 поля_ для различной компоновки для существующих записей/новых записей, загрузки файлов

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:' %>&nbsp; 
    <%= audiof.file_field :audiofile %> 

<% end -%> 

Что мне нужно сделать, это показать мне file_field только для нового аудиофайла и для существующих просто напечатайте мне размер файла, имя и, возможно, кнопку удаления.

Я также создал новую запись в контроллере с:

@content.audios.build 

Я использую Rails 3.0.3 с Paperclip плагин для загрузки. Извините, если вопрос слишком пустой.

Спасибо.

ответ

0

Из моей памяти вы сможете получить доступ к экземпляру объекта в инструкции fields_for.

Попробуйте что-то вроде этого:

<% f.fields_for :audios do |audiof| -%> 
    <% if audiof.object.new_record? %> 
    <%= f.label :audiofile, 'Audio file:' %>&nbsp; 
    <%= audiof.file_field :audiofile %> 
    <% else %> 
    <%= "Filename = #{audiof.object.audiofile.filename}" %> 
    <%= "url = #{audiof.object.audiofile.url}" %> 
    <% end %> 
<% end -%> 

Если audiof.object возвращает нильполугруппы (В этом случае, это не доброе имя), проверьте, отображая все открытые методы <% = raise audiof.public_methods.inspect %>

Метод объекта должен возвращать экземпляр класса Audio.

+0

Спасибо, что я искал, но не знал, как получить доступ к new_record? метод. – laleshii

Смежные вопросы