Rails 4.1 Carrierwave无法上传图片

时间:2015-03-24 14:42:06

标签: ruby-on-rails ruby carrierwave

我正在使用carrierwave gem上传电影列表的图片。我创建了一个迁移,为我的列表数据库创建了一个图像列。

更新了清单model.rb文件

class Listing < ActiveRecord::Base
  mount_uploader :image, ImageUploader

    belongs_to :user
end

:html = > { multipart: true }命令添加到我的简单表单

    <div class="wizard-container"> 
            <%= simple_form_for(@listing, url: new_user_registration_path, method: :get,  :html => { multipart: true } ) do |f| %>



<div class="card wizard-card ct-wizard-orange" id="wizard">
            <!--        You can switch "ct-wizard-orange"  with one of the next bright colors: "ct-wizard-blue", "ct-wizard-green", "ct-wizard-orange", "ct-wizard-red"             -->

                <div class="wizard-header">
                  <h3>
                    <b>LIST</b> YOUR MOVIE <br>
                    <small>This information will let us know more about your movie</small>
                  </h3>
                </div>

我的listing.html.erb文件的图片字段

<div class="row">
              <div class="col-sm-10 col-sm-offset-1">
                <%= f.file_field :image %><br>
              </div>
            </div>

但是当我创建一个列表时,下面的信息显示在控制台

Started GET "/users/sign_up?utf8=%E2%9C%93&listing%5Btitle%5D=Top+Gun&listing%5Btime%5D=14.35&listing%5Bdate%5D=24%2F03%2F2016&listing%5Bseats%5D=5&listing%5Bvenue_name%5D=Preston+Library&listing%5Bimage%5D=IMG_0892.JPG&listing%5Bprice%5D=2.3&listing%5Blocation%5D=Preston+Town+Hall&listing%5Bother_info%5D=This+is+a+great+venue&listing%5Bprojector%5D=0&listing%5Bcables%5D=0&listing%5Blaptops%5D=0&listing%5Bseating%5D=0&listing%5Bblinds%5D=0&listing%5Binternet%5D=0&listing%5Blighting%5D=0&listing%5Bcamcorder%5D=0&listing%5Bcatering%5D=0&listing%5Btoilets%5D=0&listing%5Bfire%5D=0&listing%5Bfire%5D=1&commit=Create+Listing" for 127.0.0.1 at 2015-03-24 14:36:31 +0000
Processing by Devise::RegistrationsController#new as HTML
  Parameters: {"utf8"=>"✓", "listing"=>{"title"=>"Top Gun", "time"=>"14.35", "date"=>"24/03/2016", "seats"=>"5", "venue_name"=>"Preston Library", **"image"=>"IMG_0892.JPG",** "price"=>"2.3", "location"=>"Preston Town Hall", "other_info"=>"This is a great venue", "projector"=>"0", "cables"=>"0", "laptops"=>"0", "seating"=>"0", "blinds"=>"0", "internet"=>"0", "lighting"=>"0", "camcorder"=>"0", "catering"=>"0", "toilets"=>"0", "fire"=>"1"}, "commit"=>"Create Listing"}

所以它捕获图像但是会显示图像吗?

这个应用程序与我通常做的略有不同,我先让用户登录然后创建详细信息,这个应用程序创建列表然后创建一个帐户

new.html.erb

<%= render 'layouts/header' %>

    <h2 class="text-center">Sign up</h2>

    <% 
    if !user_signed_in?
      resource.listings.build
      resource.listings[0].title = params[:listing][:title]
      resource.listings[0].time  = params[:listing][:time]
      resource.listings[0].date = params[:listing][:date]
      resource.listings[0].seats = params[:listing][:seats]
      resource.listings[0].venue_name = params[:listing][:venue_name]
      resource.listings[0].location = params[:listing][:location]
      resource.listings[0].other_info = params[:listing][:other_info]
      resource.listings[0].price = params[:listing][:price]
      resource.listings[0].projector = params[:listing][:projector]
      resource.listings[0].cables = params[:listing][:cables]
      resource.listings[0].laptops = params[:listing][:laptops]
      resource.listings[0].seating = params[:listing][:seating]
      resource.listings[0].blinds = params[:listing][:blinds]
      resource.listings[0].lighting = params[:listing][:lighting]
      resource.listings[0].camcorder = params[:listing][:camcorder]
      resource.listings[0].catering = params[:listing][:catering]
      resource.listings[0].toilets = params[:listing][:toilets]
      resource.listings[0].fire = params[:listing][:fire]
      resource.listings[0].internet = params[:listing][:internet]

    end
    %>




    <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: {class: "form-signin"}) do |f| %>

      <%= f.error_notification %>

    <%= f.input :name, required: true, autofocus: true, label: false, placeholder: "Name", input_html: {class: "form-control"} %>

    <%= f.input :email, required: true, label: false, placeholder: "Email", input_html: {class: "form-control"} %>

    <%= f.input :password, required: true, label: false, placeholder: "Password", input_html: {class: "form-control"} %>
    <%= f.input :password_confirmation, required: true, label: false, placeholder: "Password Confirmation", input_html: {class: "form-control"} %>

    <div style="display:none">
    <%= f.fields_for :listings do |listing_form| %>
      <%= listing_form.input :title, label: false, placeholder: "Movie Title", input_html: {class: "form-control"} %>
      <%= listing_form.input :time, label: false, placeholder: "What time does your movie start?", input_html: {class: "form-control"} %>
      <%= listing_form.input :date, label: false, placeholder: "What date", input_html: {class: "form-control"} %>
      <%= listing_form.input :seats, label: false, placeholder: "Number of seats", input_html: {class: "form-control"} %>
      <%= listing_form.input :venue_name, label: false, placeholder: "Name of venue", input_html: {class: "form-control"} %>
      <%= listing_form.input :location, label: false, placeholder: "Address", input_html: {class: "form-control", rows: 5 } %>
      <%= listing_form.input :other_info, label: false, placeholder: "Other information", input_html: {class: "form-control", rows: 5} %>
      <%= listing_form.input :price, label: false, placeholder: "Ticket Price (£)", input_html: {class: "form-control"} %>
      <p> Projector </p>
      <%= listing_form.input :projector, required: false, label: false %>
      <p> Cable </p>
      <%= listing_form.input :cables, required: false, label: false  %>
      <p> Laptop </p>
      <%= listing_form.input :laptops, required: false, label: false  %>
      <p> Seating </p>
      <%= listing_form.input :seating, required: false, label: false  %>
      <p> Blinds </p>
      <%= listing_form.input :blinds, required: false, label: false %>
      <p> Lighting </p>
      <%= listing_form.input :lighting, required: false, label: false %>
      <p> Camcorder </p>
      <%= listing_form.input :camcorder, required: false, label: false %>
      <p> Catering </p>
      <%= listing_form.input :catering, required: false, label: false %>
      <p> Toilets </p>
      <%= listing_form.input :toilets, required: false, label: false %>
      <p> Fire alarm </p>
      <%= listing_form.input :fire, required: false, label: false %>
      <p> Wifi/internet </p>
      <%= listing_form.input :internet, required: false, label: false %>

    <% end %>
    </div>







    <%= f.button :submit, "Sign up", class: "btn btn-primary btn-block" %>


        <%= render "devise/shared/links" %>



<% end %>

application_controller.rb

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) do |u| 
        u.permit(
            :name,
            :email, :password, :confirmation_password, 
            listings_attributes: [
                :title, :time, :date, :seats,
                :venue_name, :location, :other_info,
                :price, :projector, :cables,
                :laptops, :seating, :blinds,
                :lighting, :camcorder, :catering,
                :toilets, :fire, :internet, :image
            ]
        )
      end 
    devise_parameter_sanitizer.for(:account_update) << :name
  end
end

任何想法 尼尔

rake routes

Rails.application.routes.draw做   资源:列表

devise_for :users
  root 'pages#home'

  get 'about' => 'pages#about'

  get 'pages/contact'

  get 'dashboard' => 'pages#dashboard'

  get 'start' => 'listings#listing'

0 个答案:

没有答案