在Rails中使用Paperclip不显示图像

时间:2015-02-25 11:11:54

标签: ruby-on-rails paperclip

你好我是初学者在轨道上的ruby,我正在制作我们可以上传的应用程序,然后显示用户的图像,但图像没有上传和显示。 这是我的代码:

我上传的网页代码是:

  <%= form_for @userinfo , :html => { :multipart => true }  do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name, class: 'form-control'  %>
  <%= f.file_field :photo , class: 'form-control' %>

  <%= f.submit "Save Details", class: "btn btn-primary" %>
  <% end %> 

我的展示页面代码是:

  <%= image_tag @userinfo.photo.url %>
  <p>
     <strong>Name:</strong>
     <%= @userinfo.name %>
  </p>

我的型号代码是:

  class Userinfo < ActiveRecord::Base
    has_attached_file :photo
    validates_attachment_presence :photo
    validates_attachment_size :photo, :less_than => 5.megabytes
    validates_attachment_content_type :photo, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
  end

我的控制器代码是:

  class UserinfoController < ApplicationController
    def new
      @userinfo= Userinfo.new
    end
    def create
      @userinfo = Userinfo.new(user_params)    
      if @userinfo.save
        flash[:success] = "User created Successfully!!"
        redirect_to userinfo_path
      else
        render 'new'
      end
    end
    def show
       @userinfo = Userinfo.find(params[:id])
    end

    private
    def user_params
        params.require(:userinfo).permit(:name, :father_name, :mother_name, :contact_number, :photo)
    end
  end 

我从日志文件得到的错误是:“ActionController :: RoutingError(没有路由匹配[GET]”/photos/original/missing.png“)”并在显示页面上显示“缺少”而不是显示图片。 我是初学者,所以告诉我我做错了什么。谢谢。

2 个答案:

答案 0 :(得分:0)

不是答案,而是调试指南。

  • 查看日志,了解params[:id]
  • 中的show动作即将发生的情况 在您的控制台中
  • ,加载带有该ID的Userinfo,例如userinfo = Userinfo.find(123)
  • 在控制台中
  • userinfo.photouserinfo.photo.url - 这些看起来是正确的吗?
    • 如果确实看起来不错,请检查该文件是否位于他们指向的位置。文件路径与您的公用文件夹相关。
    • 如果他们看起来不正确,那么问题可能是他们实际上并没有真正正确地上传。检查您的上传过程是否正常,并正确设置与Userinfo对象的图像关联。

答案 1 :(得分:0)

我认为您已经定义了附件的default_url,例如

:default_url => "/images/:style/missing.png"

你需要将其删除并使用99.99%的基本定义。

attr_accessible :avatar
has_attached_file :avatar,
:url  => "/assets/images/users/:id/:style/:basename.:extension",
##user defined path
:path => :rails_root/public/assets/images/:id/:style/:basename.:extension",
:styles => { :medium => "300x300>", :thumb => "100x100>" },
##commenting the datault url
##:default_url => "/images/:style/missing.png"

编辑答案: -

So for a model user_info having avatar ..the view part with form_f,或

form_for(@user_info,url:your_post_path) do |f|
## use html instead
  <input type="file" name="user_info[avatar][]" multiple>
##or use helper instead
  <%= f.file_field :avatar %>
<%end%>