2016-02-04 21 views
0

我正在設計一個設計用戶上傳許多圖像的項目。所以我試圖實現的是用戶上傳一張帶有描述的圖片,然後點擊一個「添加另一個」按鈕,允許用戶添加另一張圖片和描述,用戶可以添加任意數量的圖片。在rails 4中使用嵌套窗體進行多圖像上載

有人能指出我在正確的方向,在我應該看到什麼來完成任務嗎?

+0

開始與一些更基本的相關導軌和工作從那裏。 [railscasts.com](http://railscasts.com/)是一個很好的資源。 – Oleander

回答

1

你要使用accepts_nested_attributes_for,標準功能包括用於在提交嵌套屬性:

#app/models/project.rb 
class Project < ActiveRecord::Base 
    has_many :images 
    accepts_nested_attributes_for :images, reject_if: :all_blank, allow_destroy: true 
end 

雖然 - 嚴格地講 - 你想要的功能是將多個元素添加到提交( images#new),Rails一次只能處理一個記錄創建。使用以下會更有益:

#config/routes.rb 
resources :projects #-> url.com/projects/:id/edit 

#app/controllers/projects_controller.rb 
class ProjectsController < ApplicationController 

    def new 
     @project = Project.new 
     @project.images.build 
    end 

    def edit 
     @project = Project.find params[:id] 
    end 

    def update 
     @project = Project.find params[:id] 
     @project.update project_params 
    end 

    private 

    def project_params 
    params.require(:project).permit(:x, :y, images_attributes: [:attachment]) 
    end 
end 

#app/views/projects/new.html.erb 
<%= render "form", locals: { project: @project } %> 

#app/views/projects/edit.html.erb 
<%= render "form", locals: { project: @project } %> 

#app/views/projects/_form.html.erb 
<%= form_for project do |f| %> 
    <%= f.text_field :x %> 
    <%= f.text_field :y %> 
    <%= f.fields_for :images do |i| %> 
     <% if i.object.new_record? %> 
     <%= f.file_field :attachment %> 
     <% else %> 
     <%= image_tag i.object.attachment.url %> 
     <%= i.check_box :_destroy %>   
     <% end %> 
    <% end %> 
    <%= f.submit %> 
<% end %>  

上面應該給你一個形式的@project,裏面嵌入圖像。


要增加「額外」的字段,你最好看cocoon gem或本Railscast:Nested Forms part 1

+1

我開始將它融入到我的項目中,它似乎進展順利,我期待着,我使用惡意的寶石來創建多頁登錄,在輸入寄存器詳細信息後,用戶輸入有關它們自我的更多詳細信息,但是使用rails 4 ,我們有很強的參數,並且cocoon gem傳遞了不同的參數,例如model_attributes:[:id,:Name,:mname,:name,:done,:_destroy],當傳入wicked_controller.rb時會出錯,關於這個問題:http://stackoverflow.com/questions/35270729/wicked-gem-with-cocoon-gem-and-devise-user-model –

+0

讓我看看,我沒有使用之前的邪惡的寶石所以我可能需要做一些閱讀 –