3

ペーパークリップを使用して、1 つの建物の 1 つの写真をアップロードしています。http://www.youtube.com/watch?v=KGmsaXhIdjc私はこの方法でそれを行いました。しかし、1 つの建物に多くの写真をアップロードすることにしました。ペーパークリップでそれを行うことはできますか、それとも変更して jQuery を使用する必要がありますか? できればどうすればいいですか? Ps: 必要に応じて、コードをアップロードします。追伸: 私は、データベースに写真 2 と写真 3 用にさらに 2 つの列を作成することを考えています。1枚の写真をアップロードするのに別の方法で作ったと思います。これは、すべてを変更する必要があることを意味しますか?

更新 1:

routes.rb で

resources :buildings do 
      resources :photos
  end

建物内>_form

<%= form_for(@building, :html=>{:multipart => true}) do |f| %>
  <% if @building.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@building.errors.count, "error") %> prohibited this building from being saved:</h2>

      <ul>
      <% @building.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :status %><br />
    <%= f.select :status, Building::STATUS, :prompt=>'Select status of the building' %>
  </div>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_area :description, :rows => 10 %>
  </div>
  <div class="field">
    <%= f.label :price %><br />
    <%= f.text_field :price %>
  </div>
  <div class="field">
    <!--<%= f.label :photo %><br />
    <%= f.file_field :photo %> -->
    <%= f.fields_for :photos do |photo| %>  
    <% if photo.object.new_record? %>
      <%= photo.file_field(:image) %>

     <% else %> 
        <%= image_tag(photo.url(:thumb)) %>
        <%= photo.hidden_field :_destroy %>
        <%= photo.link_to_remove "X"%>
    <% end %>
  <% end %>

    <p><%= f.link_to_add "Add photo", :photos %></p>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

モデル>建物内

 attr_accessible :description, :price, :status, :title, :photo

accepts_nested_attributes_for :photo, :allow_destroy => true

  has_attached_file :photo ,
                  :url  => "/assets/products/:id/:style/:basename.:extension",
                  :path => ":rails_root/public/assets/products/:id/:style/:basename.:extension"
4

1 に答える 1

5

はい、クリップでできます。私が行う方法は、ネストされたリソースとnested_form gemを使用することです。

たとえば、あなたbuilding has_many :photosphoto belongs_to :building

次に、次の/views/buildings/_form.html.erbように記述します。

<%= nested_form_for @building, :html => { :multipart => true } do |f| %>
  <%# all your building fields .... %>

  <%= f.fields_for :photos do |photo| %>  
    <% if photo.object.new_record? %>
      <%= photo.file_field(:image) %>
    <% else %> 
      <%= image_tag(photo.url(:thumb)) %>
      <%= photo.hidden_field :_destroy %>
      <%= photo.link_to_remove "X" %>
    <% end %>
  <% end %>

  <p><%= f.link_to_add "Add photo", :photos %></p>

  <%= f.submit %>
<% end %>

モデルaccepts_nested_attributes_for :photos, :allow_destroy => true内に設定し、ネストも含める必要があります。building.rbroutes.rb

resources :buildings do 
  resources :photos
end
于 2013-02-15T08:51:49.653 に答える