您好我正在使用paperclip gem,目前我的网站用户可以在我的注册(devise)下的编辑个人资料页面上传他/她的头像,上传代码如下:
<div class="field">
<%= f.label :avatar %><br />
<%= f.file_field :avatar %>
</div>
有没有办法可以在不同的视图中呈现此头像上传?我该怎么办呢?我想把它放在我的设计视图中,而不是我对用户个人资料的看法。
答案 0 :(得分:2)
在您的用户个人资料页面上,您可以为当前用户放置包含更新操作的表单。它可能看起来像这样:
用户/注册/ 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 %>
答案 1 :(得分:2)
如果你想在另一个视图中上传头像,你当然可以这样做。
如果您想在设计视图中执行此操作,则必须编辑数据库,模型和控制器。
您可以设置&#34;个人资料&#34;行动没问题,我们这样做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 %>
这必须与相应的型号代码等匹配,但应该可以让您上传相应的头像。
您还可以将头像显示在应用的其他部分,例如:
可以使用标准Paperclip 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注册视图中包含头像上传工具。
答案 2 :(得分:0)
在你看来,你可以像这样显示它
<%= image_tag(@user.image.url %>
或者如果您有不同的尺寸,那么您可以像这样渲染
<%= image_tag(@user.image.url(:original) %> # :original is image defined in model.