2010-07-15 3 views
1

У меня есть страница, где я могу просмотреть продукт, и прямо с этой страницы пользователь может добавлять и удалять несколько изображений, связанных с продуктом. Я использую paperclip в форме для загрузки нового файла.Rails Paperclip с ассоциацией моделей

Поскольку для продукта можно сохранить несколько изображений, я создал модель изображения, относящуюся к модели продукта. Из-за ассоциации невозможно использовать файл paperclip по умолчанию. Мое решение ниже работает, но мне интересно, есть ли лучший способ в рельсах, чтобы выполнить это без всякого html, который я взломал, чтобы заставить его работать.

class Image < ActiveRecord::Base
belongs_to :product

class Product < ActiveRecord::Base
has_many :images, :dependent => :destroy accepts_nested_attributes_for :images, :allow_destroy => true

show.html.erb

<% @product.images.build %>
<%= form_for(@product, :html => { :multipart => true }) do |f| %>

<input id="image" name="product[images_attributes][<%= @product.images.count %>][photo]" >size="30" type="file" onchange="this.form.submit();" />

<% end %>

ответ

1

Как вы, скорее всего, знаете, в вашем контроллере вы можете создавать пустые входные файлы с @ product.images.build; в то время как на ваш взгляд, как для редактирования и создания вы могли бы сделать что-то вроде этого:

<% f.fields_for :images do |img| %> 

    <% if img.object.data_file_name %> 
    <%= image_tag img.object.data.url(:thumb) %> 
    <%= link_to 'Delete', img.object, {:method => :delete, :confirm => 'Are you sure?'} %> 
    <% else %> 
    <%= img.file_field :data %> 
    <% end %> 

<% end %> 

Этот конкретный пример требует контроллер изображения с уничтожить действия, но он должен работать достаточно хорошо, даже если изображения являются полиморфными.

+0

спасибо, я начал кодирование в рельсах 2 недели назад и не знал о .object, так просто сейчас! – David

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