2017-06-15 101 views
1

因此,我正在使用rails上的简单分类应用程序。我试图通过carrierwaveminimagick实现图片上传,这是有据可查的,我还跟着无数的在线教程已经,他们都或多或少地提供应用程序相同的解决方案开发使用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) 

回答

-1

ü需要在config/application.rb文件中添加一些代码

require 'carrierwave' 
require 'carrierwave/orm/activerecord' 

,我认为它的工作tryn这个

+0

感谢Velu但是没有解决不了的问题,我已经有了那块代码在我的'config/initializers/carrier_wave.rb'文件中 –

相关问题