2010-07-15 9 views
1

제품을 볼 수있는 페이지가 있으며,이 페이지에서 직접 사용자가 제품과 관련된 여러 이미지를 추가 및 제거 할 수 있습니다. 양식에 클립을 사용하여 새 파일을 업로드하고 있습니다.레일 모델 연결을 통한 클립 클립

제품에 여러 이미지를 저장할 수 있으므로 제품 모델에 속한 이미지 모델을 만들었습니다. 연결 때문에 기본 클립 클립 파일 입력을 사용할 수 없습니다. 아래의 내 솔루션이 작동하지만, 내가 그것을 작동하게 해킹 된 모든 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

관련 문제