2017-11-28 17 views
-1

Ich versuche, Büroklammer zu implementieren, damit Benutzer ihr Profilbild auf ihrem Konto aktualisieren können. Ich benutze Devise für Kontoerstellung und Aktualisierung, aber ich bin ein wenig unsicher darüber, wie Devise mit Paperclip funktioniert, um das Bild in ActiveRecord zu speichern. Mit Büroklammer kann ich ein Foto auswählen und absenden, aber das Foto wird nicht angezeigt, wenn ich zur Showansicht gehe. Ich bin mir nicht sicher, ob das Gerät es im Active Record entsprechend speichert oder was das Problem sein könnte, nachdem ich zu viele Stunden mit dieser Funktion verbracht habe, komme ich in die StackOverflow Community um Hilfe. Bitte hilf mir!Nicht in der Lage, Büroklammer zum Hochladen von Bildern mit Gerät zum Aktualisieren von Benutzerprofil Foto in Ruby on Rails

Benutzer Controller:

class UsersController < ApplicationController 

def show 
@user = User.find(params[:id]) 
end 

def edit 
@user = User.find(params[:id]) 
end 

def update 
@user = User.find(params[:id]) 
end 

def user_params 
params.require(:user).permit(:image) 
end 

end 

registrations_controller

class RegistrationsController < Devise::RegistrationsController 

private 

def sign_up_params 
params.require(:user).permit(:name, :email, :password, 
:password_confirmation) 
end 

def account_update_params 
params.require(:user).permit(:name, :phone, :email, :image, 
:password, :password_confirmation, :current_password) 
end 

end 

edit.html.erb (registration Ansicht ersinnen)

<%= form_for (resource, as: resource_name, url: 
registration_path(resource_name), html: { method: :put }) do |f| %> 
<%= devise_error_messages! %> 

<div class="field"> 
<%= f.file_field :image %> 
</div> 
... 

Benutzermodell:

class User < ApplicationRecord 
has_many :appointments 
has_many :fruits, dependent: :destroy 
has_attached_file :image, :styles => { large: "150x150>", medium: 
"100x100>", thumb: "50x50#"} 
validates_attachment_content_type :image, content_type: 
/\Aimage\/.*\Z/ 

# Include default devise modules. Others available are: 
# :confirmable, :lockable, :timeoutable and :omniauthable 
devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 
Ansicht

zeigen:

<%= stylesheet_link_tag "user" %> 

<h1><%= @user.name %></h1> 

<div class="pic"> 
<%= image_tag @user.image.url(:large) %> 
</div> 

<h4>Phone: <%= @user.phone %></h4> 
<h4>Email: <%= @user.email %></h4> 

<p> 
<%= link_to "Edit Info", edit_user_registration_path(current_user) %> 
</p> 
+0

Aktualisieren Sie Ihre Frage mit Ihrem Code Benutzermodell – rajbir

+0

Können Sie uns auch den Code für Anzeigen Bitte, wie Sie Ihre „Show“ Ansicht geschrieben? Überprüfen Sie auch, ob etwas, das mit dem Bild zusammenhängt, in der Datenbank gespeichert wird. – bitsapien

+0

Nur aktualisiert. Was denkst du könnte das Problem sein –

Antwort

1

Hier ist, wie Sie es tun würde:

zuerst eine Migration in Ihrem User-Modell erstellen:

class AddAvatarToUsers < ActiveRecord::Migration 
    def up 
    add_attachment :users, :avatar 
    end 
end 

An zweiter Stelle in Ihrem User-Modell fügen Sie die notwendigen anhang:

has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/default_image.png" 
validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/ 

Dann stellen Sie sicher, dass Sie a re die avatar Parameter ermöglicht:

def sign_up_params 
params.require(:user).permit(:name, :email, :password, 
:password_confirmation, :avatar) 
end 

def account_update_params 
params.require(:user).permit(:name, :phone, :email, :image, 
:password, :password_confirmation, :current_password, :avatar) 
end 

Und schließlich fügen Sie Feld, um das Bild zu laden:

<%= form_for @user, url: users_path, html: { multipart: true } do |f| %> 
    <%= f.file_field :avatar %> 
<% end %> 

EDIT:

Um vollständig zu beantworten Ihre Frage ist, wie Sie angezeigt werden würde Das Bild in der Datei show.html.erb:

Anstelle von:

<%= image_tag @user.image.url(:large) %> 

tun:

<%= image_tag attachment_url(@user, :image, :fill, 300, 300, format: "jpeg") %> 
+0

Haben Sie lesen die Codeblöcke, die ich mit der Frage gepostet habe? –

+0

ist das Problem mit der Anzeige des Bildes? – Cyzanfar

+0

Ich schätze die Antwort und die Bereitschaft zu helfen. Das tue ich wirklich. Aber da es so aussieht, als ob Sie die von mir geposteten Informationen weder lesen noch verstehen, werde ich Sie höflich bitten, jegliche weitere Antwort oder Lösung dieser Frage zu verschieben. Vielen Dank. –

Verwandte Themen