你好我是初学者在轨道上的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“)”并在显示页面上显示“缺少”而不是显示图片。 我是初学者,所以告诉我我做错了什么。谢谢。
答案 0 :(得分:0)
不是答案,而是调试指南。
params[:id]
Userinfo
,例如userinfo = Userinfo.find(123)
userinfo.photo
和userinfo.photo.url
- 这些看起来是正确的吗?
答案 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%>