Rails 3 поля_ для разной компоновки для существующих записей / новых записей, загрузки файлов - PullRequest
1 голос
/ 09 января 2011

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

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 для загрузки. Извините, если вопрос слишком нюби.

Спасибо.

1 Ответ

0 голосов
/ 09 января 2011

Из моей памяти вы сможете получить доступ к экземпляру объекта в операторе 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 возвращает nil (в этом случае это не хорошее имя), проверьте, отобразив все открытые методы <% = raise audiof.public_methods.inspect %>

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

...