In den ersten beiden Teilen dieser Serie habe ich Ihnen gezeigt, wie Sie das Hochladen von Bildern in Rails mithilfe von CarrierWave aktivieren. In diesem Teil erfahren Sie, wie Sie dies mit Paperclip tun.
Paperclip ist ein Ruby-Edelstein, der von thoughtbot bereitgestellt wird. Es wurde erstellt, um Dateianhänge sehr einfach zu gestalten. In diesem Tutorial erfahren Sie, wie Sie Paperclip neben Devise verwenden.
Ohne viel zu reden, lass uns arbeiten.
Paperclip erfordert die Installation von ImageMagick auf Ihrem Computer. Sie benötigen dies zur Bildverarbeitung. Führen Sie zur Installation von ImageMagick je nach verwendetem Gerätetyp einen der folgenden Schritte aus.
Mac-Benutzer:
brauen installieren imagemagick
Ubuntu-Benutzer:
sudo apt-get install imagemagick
Verwenden Sie Ihr Terminal, um eine neue Anwendung zu generieren.
Schienen neue Büroklammer
Öffne dein Gemfile und füge die notwendigen Edelsteine hinzu:
Juwel 'Büroklammer'
Juwel 'erfinden'
Führen Sie die Bundle-Installation aus, wenn Sie fertig sind.
Installieren Sie von Ihrem Terminal aus den folgenden Befehl:
Schienen erzeugen Gerät: Installieren
Anschließend können Sie Ihr Benutzermodell generieren:
Schienen generieren den Benutzer
Migrieren Sie Ihre Datenbank danach.
rake db: migrieren
Generieren Sie Ihre Ansichten.
Schienen generieren: Ansichten
Navigieren Sie mit Ihrem Texteditor zu app / views / layouts / application.html.erb
und fügen Sie den folgenden Code direkt über dem ein Ausbeute
Block.
# app / views / layouts / application.html.erb<%= notice %>
<%= alert %>
Aus Sicherheitsgründen müssen wir Parameter im Devise-Controller zulassen. Dank des großartigen Teams von Devise ist das ganz einfach.
Aufmachen app / controller / application_controller.rb
und fügen Sie die folgenden Codezeilen ein.
# app / controller / application_controller.rb-Klasse ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me, :avatar, :avatar_cache) devise_parameter_sanitizer.for(:account_update) |u| u.permit(:username, :password, :password_confirmation, :current_password, :avatar) end end
Öffne deine Nutzer
modellieren und so aussehen lassen:
# app / models / user.rb-Klasse Benutzer < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_attached_file :avatar, styles: medium: "300x300", thumb: "100x100" validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/ end
Sie müssen ein hinzufügen Benutzerbild
Spalte in Ihre Benutzertabelle. Es gibt einen Rails-Befehl, der dies von Ihrem Terminal aus ermöglicht.
Schienen generieren die Migration add_avatar_to_users
Dadurch wird eine neue Migration in erstellt db / migrieren
. Öffnen Sie es und fügen Sie den folgenden Code ein:
Klasse AddAvatarToUsers < ActiveRecord::Migration def up add_attachment :users, :avatar end def down remove_attachment :users, :avatar end end
Führen Sie die Migration aus
rake db: migrieren
Sie bearbeiten Ihr neues Anmeldeformular app / views / devise / registrations / new.html.erb
und bearbeiten Sie das Formular app / views / devise / registrations / edit.html.erb
was ich unten habe:
# app / views / devise / registrations / new.html.erbAnmelden
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: multipart: true ) do |f| %> <%= devise_error_messages! %><%= f.label :email %>
<%= f.email_field :email, autofocus: true %><%= f.label :password %> <% if @minimum_password_length %> (<%= @minimum_password_length %> Zeichen mindestens) <% end %>
<%= f.password_field :password, autocomplete: "off" %><%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off" %><%= f.file_field :avatar %><%= f.submit "Sign up" %><% end %> <%= render "devise/shared/links" %>
# app / views / devise / registrations / edit.html.erbBearbeiten <%= resource_name.to_s.humanize %>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: method: :put ) do |f| %> <%= devise_error_messages! %><%= f.label :email %><% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<%= f.email_field :email, autofocus: true %>Warten auf Bestätigung für: <%= resource.unconfirmed_email %><% end %><%= f.label :password %> (lassen Sie das Feld leer, wenn Sie es nicht ändern möchten)
<%= f.password_field :password, autocomplete: "off" %><%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off" %><%= f.file_field :avatar %><%= f.label :current_password %> (Wir benötigen Ihr aktuelles Passwort, um Ihre Änderungen zu bestätigen.)
<%= f.password_field :current_password, autocomplete: "off" %><%= f.submit "Update" %><% end %>Kündigen Sie mein Konto
Unzufrieden? <%= button_to "Cancel my account", registration_path(resource_name), data: confirm: "Are you sure?" , method: :delete %>
<%= link_to "Back", :back %>
Starten Sie Ihren Browser und prüfen Sie, was Sie haben.
Für eine Standardanwendung möchten Sie möglicherweise prüfen, ob ein Benutzer, der sein Profil bearbeiten möchte, bereits einen Avatar hochgeladen hat. Dies lässt sich leicht in Ihre Registrierungsbearbeitungsdatei implementieren.
Öffnen Sie die Registrierungs-Bearbeitungsdatei und machen Sie sie so:
# app / views / devise / registrations / edit.html.erbBearbeiten <%= resource_name.to_s.humanize %>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: method: :put ) do |f| %> <%= devise_error_messages! %><%= f.label :email %><% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<%= f.email_field :email, autofocus: true %>Warten auf Bestätigung für: <%= resource.unconfirmed_email %><% end %><%= f.label :password %> (lassen Sie das Feld leer, wenn Sie es nicht ändern möchten)
<%= f.password_field :password, autocomplete: "off" %><%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off" %><%= f.file_field :avatar %> <% if @user.avatar? %> <%= image_tag @user.avatar.url(:thumb) %> <% end %><%= f.label :current_password %> (Wir benötigen Ihr aktuelles Passwort, um Ihre Änderungen zu bestätigen.)
<%= f.password_field :current_password, autocomplete: "off" %><%= f.submit "Update" %><% end %>Kündigen Sie mein Konto
Unzufrieden? <%= button_to "Cancel my account", registration_path(resource_name), data: confirm: "Are you sure?" , method: :delete %>
<%= link_to "Back", :back %>
Kannst du sehen, was sich geändert hat??
Im obigen Code gibt es eine bedingte Anweisung, um zu überprüfen, ob für einen Benutzer, der die Zeile verwendet, bereits ein Avatar vorhanden ist <% if @user.avatar? %>
. Wenn dies true zurückgibt, wird die nächste Zeile ausgeführt, sonst nicht.
Die Validierung ist immer wichtig, wenn Sie die Upload-Funktionen in Ihrer Webanwendung aktivieren. Büroklammer enthält Maßnahmen zur Absicherung Ihrer Bewerbung.
Sie können eine der folgenden Validierungen in Ihrem Modell verwenden.
Klasse Benutzer < ActiveRecord::Base has_attached_file :avatar # Validate content type validates_attachment_content_type :avatar, content_type: /\Aimage/ # Validate filename validates_attachment_file_name :avatar, matches: [/png\Z/, /jpe?g\Z/] # Explicitly do not validate do_not_validate_attachment_file_type :avatar end
Möglicherweise möchten Sie Paperclip beim Erstellen Ihrer nächsten Webanwendung berücksichtigen. Es hat ein tolles Team, das es unterstützt.
Auf der GitHub-Seite von Paperclip finden Sie weitere Funktionen, die nicht in diesem Tutorial behandelt werden.