我正在設計一個設計用戶上傳許多圖像的項目。所以我試圖實現的是用戶上傳一張帶有描述的圖片,然後點擊一個「添加另一個」按鈕,允許用戶添加另一張圖片和描述,用戶可以添加任意數量的圖片。在rails 4中使用嵌套窗體進行多圖像上載
有人能指出我在正確的方向,在我應該看到什麼來完成任務嗎?
我正在設計一個設計用戶上傳許多圖像的項目。所以我試圖實現的是用戶上傳一張帶有描述的圖片,然後點擊一個「添加另一個」按鈕,允許用戶添加另一張圖片和描述,用戶可以添加任意數量的圖片。在rails 4中使用嵌套窗體進行多圖像上載
有人能指出我在正確的方向,在我應該看到什麼來完成任務嗎?
你要使用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
我開始將它融入到我的項目中,它似乎進展順利,我期待着,我使用惡意的寶石來創建多頁登錄,在輸入寄存器詳細信息後,用戶輸入有關它們自我的更多詳細信息,但是使用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 –
讓我看看,我沒有使用之前的邪惡的寶石所以我可能需要做一些閱讀 –
開始與一些更基本的相關導軌和工作從那裏。 [railscasts.com](http://railscasts.com/)是一個很好的資源。 – Oleander