1
因此,我正在使用rails上的簡單分類應用程序。我試圖通過carrierwave和minimagick實現圖片上傳,這是有據可查的,我還跟着無數的在線教程已經,他們都或多或少地提供應用程序相同的解決方案開發使用軌和SQlite的 。使用carrierwave在rails上上傳圖片
執行我的代碼後,我沒有收到任何錯誤消息或警告,它只是不上傳圖像。當我使用查詢我的數據庫時,SQlite的數據庫瀏覽器每隔一個字段就會相應地填寫,除了圖片爲空。
我不包括圖片屬性作爲一個單獨的模型。我希望它們只是我的一部分廣告模型
PS。這是我在Stackoverflow上的第一篇文章,所以請耐心等待。除圖像上傳以外的其他一切工作
new.html.erb
<div class="new_ad_form row">
<div class="col-lg-6 col-lg-offset-3">
<%= form_for(@ad, :html => { :multipart => true }) do |f|%>
<%= render 'layouts/shared/error_messages', object: f.object %>
<div class= "new_ad_field">
<%= f.label "title:" %> <!-- f.object here refers to @ad -->
<%= f.text_field :title %><br>
</div>
<div class= "new_ad_field">
<%= f.label :category %>
<%= f.select :category, @categories %><br>
</div>
<div class= "new_ad_field">
<%= f.label :price %>
<%= f.number_field(:price, in: 1.0..1000000, step: 0.5) %>
</div>
<div class= "new_ad_field">
<%= f.label :description %>
<%= f.text_area :description, size: "30x5" %>
</div>
<div class= "new_ad_field">
<%= f.label :address %>
<%= f.text_field :address %><br>
</div>
<div class= "new_ad_field">
<%= f.label :state %>
<%= f.select :state, @states, {}, :onChange=>"javascript:
$dc.select_city();" %>
</div>
<div class= "new_ad_field">
<%= f.label :city %>
<%= f.select :city, @cities %><br>
</div>
<div class="field">
<%= f.label :images %><br>
<%= f.file_field :images, :multiple => true %>
</div>
<div style="text-align: center"><%= f.submit "Post ad", class: "btn btn-
large btn-primary" %></div>
<% end %>
</div>
</div>
ads_controller.rb
class AdsController < ApplicationController
def new
#@user = current_user
@ad = Ad.new
@categories = ['Electronic equipment', 'Cars', "Clothing", "Phones"]
@location = {"Abia": ["Abuja","Gusau", "Kaduna", "Kano", "Yola", "Lagos",
"Minna", "Keffi"],
"Zamfara": ["Abuja","Gusau", "Kaduna", "Kano", "Yola", "Lagos",
"Minna", "Keffi"]}
@states = @location.keys
@cities = @location[@location.keys[0]]
end
def show
@user = current_user
@ads = @user.ads.paginate(page: params[:page])
end
def create
@ad = current_user.ads.build(ad_params)
if @ad.save
flash[:success] = "ad created!"
redirect_to current_user
else
render 'static_pages/home'
end
private
def ad_params
params.require(:ad).permit(:user_id, :title, :category, :description,
:price, :address, :city, :state, {images: []})
end
end
ad.rb
class Ad < ApplicationRecord
belongs_to :user
validates :user_id, presence: true
#validates :images, presence: true
mount_uploader :images, ImagesUploader
serialize :images, JSON
end
images_uploader.rb
class ImagesUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :thumb do
process :resize_to_fit => [50, 50]
end
def extension_white_list
%w(jpg jpeg gif png)
end
end
,當然在我的Gemfile我有
....................
gem 'carrierwave'
gem 'mini_magick'
....................
配置/初始化/ carrier_wave.rb
require 'carrierwave'
require 'carrierwave/orm/activerecord'
以下是命令行日誌。基本上我試圖找出爲什麼它回滾交易。
Started POST "/ads" for 127.0.0.1 at 2017-06-19 14:22:00 -0400
Processing by AdsController#create as HTML
Parameters: {"utf8"=>"✓",
"authenticity_token"=>"7ehxs5JEkuhVasFB0m8VQkVbPLEc1+q/xPJQMD1H5Fblw==",
"ad"=>{"title"=>"sdasdfasdfaasdf",
"category"=>"Electronic equipment", "price"=>"500",
"description"=>"asdfasdfasdfwetqwerfasdfasdcvzx",
"address"=>"asdfafawefasdfadf", "state"=>"Kaduna", "city"=>"Zaria",
"images"=>[#
<ActionDispatch::Http::UploadedFile:0x0000001041d1a0 @tempfile=#
<Tempfile:C:/Users/SAMSUNG/AppData/Local/Temp/RackMultipart20170619-8456-
1i97f2t.jpg>,
@original_filename="394502_10152051195495464_1783658057_n.jpg",
@content_type="image/jpeg", @headers="Content-Disposition: form-data;
name=\"ad[images][]\";
filename=\"394502_10152051195495464_1783658057_n.jpg\"\r\nContent-Type:
image/jpeg\r\n">]}, "commit"=>"Post ad"}
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ?
ORDER BY "users"."id" ASC LIMIT ? [["id", 24], ["LIMIT", 1]]
(0.0ms) begin transaction
(0.0ms) rollback transaction
No template found for AdsController#create, rendering head :no_content
Completed 204 No Content in 1706ms (ActiveRecord: 1.0ms)
感謝Velu但是沒有解決不了的問題,我已經有了那塊代碼在我的'config/initializers/carrier_wave.rb'文件中 –