Paperclip gem 在不同视图中渲染头像上传

Paperclip gem render avatar upload in different view

您好,我正在使用 paperclip gem and currently a user of my website can upload his/her avatar in the edit profile page under my registrations (devise) 上传代码如下:

  <div class="field">
    <%= f.label :avatar %><br />
    <%= f.file_field :avatar %>
  </div>

有什么方法可以在不同的视图中呈现上传的头像?我该怎么做?我不想将它放在我的设计视图中,而是放在我的用户配置文件视图中。

在你的视图中你可以这样显示

<%= image_tag(@user.image.url %>

或者如果你有不同的尺寸,那么你可以这样渲染

<%= image_tag(@user.image.url(:original) %> # :original is image defined in model.

在您的用户个人资料页面上,您可以为当前用户放置一个包含更新操作的表单。它可能看起来像这样:

users/registrations/show.html.erb

<% if current_user == @user %>
  <%= form_for current_user, url: { :action => :update } do |f| %>
    <!-- ... -->
    <div class="field">
      <%= f.label :avatar %><br />
      <%= f.file_field :avatar %>
    </div>
    <!-- ... -->
    <div class="actions">
      <%= f.submit %>
    </div>        
  <% end %>
<% end %>

如果你想上传不同视角的头像,当然可以。

如果您想在 devise 视图中执行此操作,则必须编辑数据库、模型和控制器。


你可以设置一个"profile" 没问题,我们这样做here(这只是一个测试应用程序,你可以免费注册并自己尝试......):

您必须记住 User 模型与 Devise 无关 - 您可以用它做任何您想做的事,无论它是否用于身份验证。

您可以执行以下操作:

#config/routes.rb
resources :profile, controller: :users, only: [:index, :update]

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def update
      current_user.update avatar_params
   end

   private

   def avatar_params
      params.require(:user).permit(:avatar)
   end
end

#app/views/users/index.html.erb
<%= form_for current_user, multipart: true do |f| %>
    <%= f.label :avatar %><br />
    <%= f.file_field :avatar %>
    <%= f.submit %>
<% end %>

这必须与适当的模型代码等相匹配,但应该可以让您上传适当的头像。

您还可以让头像出现在应用的其他部分,如下所示:

这可以使用标准回形针来完成image file path helpers:

<%= image_tag @user.avatar.url %>

如果您想将头像绑定到注册过程,您必须将设备控制器编辑为 allow the parameters:

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:user) << :avatar
  end
end

如果您的模型设置正确,这应该允许您在您的 Devise 注册视图中包含头像上传工具。