设计 - 使用Paperclip注册(缺失图像)

时间:2014-03-25 11:03:43

标签: ruby-on-rails ruby-on-rails-4 devise paperclip

我目前正在使用paperclip(4.1.1)将图像上传到我的rails应用程序。 Rails(4.0.2),Devise(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

user.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>

1 个答案:

答案 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查找此文件夹结构的位置。