2015-12-18 2 views
2

Привет Я использую paperclip gem, и в настоящее время пользователь моего сайта может загрузить свой аватар на странице редактирования профиля под моими регистрациями (devise), код для загрузки выглядит следующим образом:Paperclip gem render avatar upload in different view

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

Есть ли способ передать этот аватар в другом виде? Как мне это сделать? Я хочу разместить его не в моем представлении, а в моем представлении для профиля пользователя.

+0

Если вы добавили поле 'avatar 'в свою пользовательскую модель, вы можете сделать его таким же образом в своем действии show, например:' <% = image_tag (@ user.avatar.url)%> '. Если вы хотите показать только текущий аватар пользователя, замените '@ user' на' current_user' –

+0

Я хочу отобразить загрузку, я уже сделал изображение: D – Acrux

+1

А, я вижу (: вы должны быть в состоянии открыть a '<% = form_for current_user,: url => {: action =>: update}%>' на странице профиля вашего пользователя и поместить туда аватара –

ответ

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 %> 
0

В просмотре вы можете показать, как этот

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

или если у вас есть разные размеры, то вы можете оказать как этот

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

Если вы хотите загрузки аватару в другой точки зрения, можно, конечно, сделать это.

Если вы хотите сделать это в своем devise, вам нужно будет отредактировать свою базу данных, модель и контроллер.


Вы можете установить «профиль» действие не проблема, мы делаем это here (это только тест приложение, вы можете зарегистрироваться и попробовать сами ...):

enter image description 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 %> 

Это должны быть согласованы с соответствующим кодом модели и т.д., но он должен работать, чтобы позволить вам загрузить соответствующий аватар.

Вы также можете сделать аватар появляются в других частях приложения, например:

enter image description here

Это может быть сделано с помощью стандартного Скрепка 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.

+0

Действительно оценил вашу работу здесь peck;) –

+0

Спасибо F, рад слышать, как люди оценивают это! –