我目前正在使用paperclip(4.1.1)将图像上传到我的rails应用程序。 Rails(4.0.2),Devise(3.2.2)
我也在使用设计,我试图覆盖设计注册控制器,以便用户可以上传图像作为他们的头像,但由于某些原因,它不起作用,我一直在我的视图中“失踪”。
顺便说一句,:default_url => "assets/images/small.png"
效果不佳,而不是显示图片,它会显示文字"small"
一直在使用谷歌搜索,但找不到任何解决方案。
请在下面找到我的代码。 感谢
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
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
<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>
答案 0 :(得分:3)
RegistrationsController
应定义如下:
class RegistrationsController < Devise::RegistrationsController ## Remove :: from the from the front of Devise
在使用Rails 4时,您需要允许显式插入/更新的参数。允许您添加到Devise模型的自定义字段。
在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
上述代码将确保为avatar
记录存储User
。
另外,请确保您上传图片的表单有multipart: true
。
例如:
<%= form_for @user, html: { multipart: true } do |f| %>
最后一点,对于:default_url => "assets/images/small.png"
,请确保small.png
位于public/assets/images
目录下,因为这是Paperclip查找此文件夹结构的位置。