设计 - 用回形针注册(缺少图像)
Posted
技术标签:
【中文标题】设计 - 用回形针注册(缺少图像)【英文标题】:Devise - Registration with Paperclip ( missing image ) 【发布时间】:2014-03-25 11:03:42 【问题描述】:我目前正在使用回形针 (4.1.1) 将图像上传到我的 rails 应用程序。 Rails(4.0.2)、设计(3.2.2)
我也在使用设计,我正在尝试覆盖设计注册控制器,以便用户能够上传图像作为他们的头像,但由于某些原因,它不起作用,我的视图中不断出现“丢失”。
顺便说一句,:default_url => "assets/images/small.png"
不能正常工作,它不显示图像,而是显示文本 "small"
一直在谷歌搜索,但找不到任何解决方案。
请在下面找到我的代码。 谢谢
Registrations_Controller.rb
class RegistrationsController < ::Devise::RegistrationsController
def update
new_params = params.require(:user).permit(
:username, :current_password, :password,
:password_confirmation)
change_password = true
if params[:user][:password].blank?
params[:user].delete("password")
params[:user].delete("password_confirmation")
new_params = params.require(:user).permit(:username)
change_password = false
end
@user = User.find(current_user.id)
is_valid = false
if change_password
is_valid = @user.update_with_password(new_params)
else
@user.update_without_password(new_params)
end
if is_valid
set_flash_message :notice, :updated
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
render "edit"
end
end
用户.rb
class User < ActiveRecord::Base
has_attached_file :avatar, :styles => :medium => "300x300>", :thumb => "100x100>" , :default_url => "assets/images/small.png"
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end
用户/show.html.erb
<h1>USER SHOW</h1>
<div>
<h3><%= @user.username %></h3>
</div>
<%= image_tag @user.avatar.url(:thumb) %>
<div>
<% if @user.posts.any? %>
<h3>Posts (<%= @user.posts.count %>)</h3>
<ol>
<%= render @posts %>
</ol>
<% end %>
</div>
</div>
【问题讨论】:
您使用了小尺寸图像,但您没有将其设置为回形针图像样式添加它,它会为您工作。 嗯,不好意思不知道你的意思,small.png
(图片的名字叫小)
图片是否上传?如果图像已上传,则说明您的路径有问题。如果未上传,则存在配置问题,您的模板中包含什么并不重要。
对于default_url
,图像“small.png”已经在“assets/images/”中。而且上传,图片没有上传,所以我猜我的Registrations_Controller.rb
有问题
has_attached_file :avatar, :styles => :medium => "300x300>", :thumb => "100x100>" , :default_url => "assets/images/small.png",样式不包含小样式。
【参考方案1】:
RegistrationsController
应定义如下:
class RegistrationsController < Devise::RegistrationsController ## Remove :: from the from the front of Devise
当您使用 Rails 4 时,您需要明确允许您想要插入/更新的参数。允许您添加到设计模型的自定义字段。
在ApplicationController
,你应该有以下代码来允许avatar
:
class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
## You can add add other custom fields that you have added to User Model in place of attr1, attr2
devise_parameter_sanitizer.for(:sign_up) << :avatar << :attr1 << :attr2 ## To permit parameters while User creation
devise_parameter_sanitizer.for(:account_update) << :avatar << :attr1 << :attr2 ## To permit parameters while User updation
end
end
以上代码将确保为User
记录存储avatar
。
另外,请确保您上传图片的表单具有multipart: true
。
例如:
<%= form_for @user, html: multipart: true do |f| %>
最后一点,对于:default_url => "assets/images/small.png"
,确保small.png
位于public/assets/images
目录下,因为Paperclip 会在其中查找此文件夹结构。
【讨论】:
感谢您的回答,我在new_params
中添加了:avatar
在我的Registrations_Controller.rb
中并且它有效。但是对于默认的url,我无法让它使用:thumb
的样式,我该怎么办?
如果您想将样式指定为 thumb 那么您应该将默认图像添加到“public/assets/images/thumb/small.png”并将 default_url 指定为“assets/images/:style/小.png"
我试过了,还是不行,图片还是很大,没有样式。
这是您设置的默认图像,如果未找到实际图像,则会显示该图像。不会对其应用任何样式。您必须注意默认图像的样式。
那么有没有办法为默认图像添加样式?谢谢以上是关于设计 - 用回形针注册(缺少图像)的主要内容,如果未能解决你的问题,请参考以下文章