यह समाधान करने के लिए है खरोंच से रेल 4 में carrierwave का उपयोग कर कई छवियों को अपलोड
इन चरणों का पालन करने के लिए।
rails new multiple_image_upload_carrierwave
मणि फ़ाइल में
gem 'carrierwave'
bundle install
rails generate uploader Avatar
पद पाड़
rails g scaffold post title:string
बनाएं post_attachment पाड़ बनाएं
rails g scaffold post_attachment post_id:integer avatar:string
rake db:migrate
post.rb
class Post < ActiveRecord::Base
has_many :post_attachments
accepts_nested_attributes_for :post_attachments
end
post_attachment.rb
class PostAttachment < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
belongs_to :post
end
में post_controller.rb में
def show
@post_attachments = @post.post_attachments.all
end
def new
@post = Post.new
@post_attachment = @post.post_attachments.build
end
def create
@post = Post.new(post_params)
respond_to do |format|
if @post.save
params[:post_attachments]['avatar'].each do |a|
@post_attachment = @post.post_attachments.create!(:avatar => a, :post_id => @post.id)
end
format.html { redirect_to @post, notice: 'Post was successfully created.' }
else
format.html { render action: 'new' }
end
end
end
def update
respond_to do |format|
if @post.update(post_params)
params[:post_attachments]['avatar'].each do |a|
@post_attachment = @post.post_attachments.create!(:avatar => a, :post_id => @post.id)
end
end
end
def destroy
@post.destroy
respond_to do |format|
format.html { redirect_to @post }
format.json { head :no_content }
end
end
private
def post_params
params.require(:post).permit(:title, post_attachments_attributes: [:id, :post_id, :avatar])
end
विचारों/पदों/_form.html.erb में
<%= form_for(@post, :html => { :multipart => true }) do |f| %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %>
</div>
<%= f.fields_for :post_attachments do |p| %>
<div class="field">
<%= p.label :avatar %><br>
<%= p.file_field :avatar, :multiple => true, name: "post_attachments[avatar][]" %>
</div>
<% end %>
<% if params[:controller] == "post" && params[:action] == "edit" %>
<% @post.post_attachments.each do |p| %>
<%= image_tag p.avatar, :size => "150x150" %>
<% end %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
विचारों/पदों/show.html.erb में
<p id="notice"><%= notice %></p>
<p>
<strong>Title:</strong>
<%= @post.title %>
</p>
<% @post_attachments.each do |p| %>
<%= image_tag p.avatar_url, :size => "150x150" %>
<%= link_to "Destroy", p, method: :delete %>
<% end %>
<%= link_to 'Edit', edit_post_path(@post) %> |
<%= link_to 'Back', posts_path %>
रेल 3 मजबूत पैरामीटर परिभाषित करने की आवश्यकता है और के रूप में में आप क्योंकि विशेषता सुलभ रेल में पदावनत किया गया है दोनों मॉडल और accept_nested_attribute मॉडल पोस्ट करने के लिए attribute_accessible परिभाषित कर सकते हैं 4.
यह सच नहीं है। यह एकल क्षेत्र के भीतर एकाधिक अपलोड का समर्थन करता है। मेरा जवाब देखें वाहकवेव बहुत अधिक प्रदान करता है। – SSR
बस स्पष्ट होने के लिए: आपका समाधान एकाधिक ऑब्जेक्ट्स (post_attachments) का उपयोग करता है, प्रत्येक एक अपलोडर के साथ, और "एकाधिक" विशेषता के उपयोग के लिए सही तरीके से असाइन किए गए पैरामीटर प्राप्त करने के लिए आवश्यक मैन्युअल कार्य प्रदर्शित करता है। आपने दिखाया है कि ओपी क्या करना चाहता था, लेकिन यह उपरोक्त झूठ का कोई भी हिस्सा नहीं बनाता है। – Taavo
समय आगे बढ़ता है। पृथ्वी स्पिन और धीरे-धीरे बदलती है, और कैरियरवेव अब बहु-फ़ाइल अपलोड को मूल रूप से समर्थन देता है। हालांकि यह करने का वाहकवेव तरीका एक बदसूरत हैक (एक सरणी का उपयोग कर एक फ़ील्ड में सभी फाइलों का संदर्भ देना) है कि मैं उपयोग से बचने के लिए। इसके बजाय एसएसआर के समाधान के साथ जाओ। –