设计 - 用回形针注册(缺少图像)

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 =&gt; "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" 我试过了,还是不行,图片还是很大,没有样式。 这是您设置的默认图像,如果未找到实际图像,则会显示该图像。不会对其应用任何样式。您必须注意默认图像的样式。 那么有没有办法为默认图像添加样式?谢谢

以上是关于设计 - 用回形针注册(缺少图像)的主要内容,如果未能解决你的问题,请参考以下文章

动态定义回形针样式大小

如何设计布局以在注册期间获取图像作为输入?

回形针 - 按图像比例进行条件裁剪

回形针 未经许可的参数:图像

在回形针中将图像调整为最小尺寸

Rails 回形针,多种不同类型(PDF、图像、文档...)