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 注册视图中包含头像上传工具。
您好,我正在使用 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 注册视图中包含头像上传工具。