koding utf-8

I den første delen av denne serien lærte du hvordan du bruker CarrierWave i programmet Rails. I denne andre delen lærer du hvordan du aktiverer bildeopplasting for brukerne dine ved hjelp av Devise. Devise er en autentiseringsløsning for Rails. Du vil også lære å bruke tåke, et Ruby-skytservicebibliotek som gjør at programmet din kan koble til Amazon Web Services.

Nok snakk-la oss komme seg til virksomheten.

Rails Application Setup

Generer det nye skinnprogrammet ditt:

skinner skinner ny myapp

Åpne opp din Gemfile og legg til følgende edelstener:

"rails Gemfile

perle carrierwave perle utforme perle mini_magick perle tåke "

Løpe bunt installasjon å installere edelstener.

Fra din terminal, opprett en Sider kontrolleren:

skinner skinner g kontroller Sider indeks

Navigere til config / routes.rb og legg til en rutebane:

"rails config / routes.rb

root til: 'sider # index'

Generer og konfigurer Devise

Opplastingsfunksjonen vil bli integrert i vår brukermodell for brukere å laste opp avatarer. Fra din terminal, installer utarbeide:

skinner skinner generere utforme: installere

Generatoren vil installere en initialiserer som beskriver alle av Devises konfigurasjonsalternativer. Åpne opp app / visninger / oppsett / application.html.erb i teksteditoren din og legg til følgende kode over utbytte blokkere:

"rails app / visninger / oppsett / application.html.erb

<%= notice %>

<%= alert %>

"

På dette tidspunktet kan du generere brukermodellen din:

skinner skinner generere utforme bruker

Deretter migrere databasen din:

skinner rake db: migrere

Du må redigere utforme visninger, så det er viktig at du genererer dem:

skinner skinner generere utforme: visninger

Og det vil gjøre det magiske.

Bruk tekstredigeringsprogrammet, åpne app / visninger / tenke / registreringer / new.html.erb og rediger den for å se slik ut:

"rails app / visninger / tenke / registreringer / new.html.erb

Melde deg på

<%= 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 %> tegn minimum) <% end %>
<%= f.password_field :password, autocomplete: "off" %> <%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off" %> <%= f.label :avatar do %> <%= f.file_field :avatar %> <%= f.hidden_field :avatar_cache %> <% end %> <%= f.submit "Sign up" %>

<% end %>

<%= render “devise/shared/links” %>"

Gjør det samme for app / visninger / tenke / registreringer / edit.html.erb:

"rails app / visninger / tenke / registreringer / edit.html.erb

Redigere <%= resource_name.to_s.humanize %>

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

<%= f.label :email %>
<%= f.email_field :email, autofocus: true %>

<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>

For tiden venter bekreftelse på: <%= resource.unconfirmed_email %>
<% end %>

<%= f.label :password %> (la være tom hvis du ikke vil endre den)
<%= f.password_field :password, autocomplete: "off" %> <%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off" %>

<% if current_user.avatar.url.present? %> <%= image_tag(current_user.avatar.url) %> <%= f.label :remove_avatar do %> <%= f.check_box :remove_avatar %> <% end %> <% end %> <%= f.file_field :avatar %> <%= f.hidden_field :avatar_cache %>

<%= f.label :current_password %> (vi trenger ditt nåværende passord for å bekrefte endringene dine)
<%= f.password_field :current_password, autocomplete: "off" %> <%= f.submit "Update" %>

<% end %>

Avbryt kontoen min

Ulykkelig? <%= button_to "Cancel my account", registration_path(resource_name), data: confirm: "Are you sure?" , method: :delete %>

<%= link_to “Back”, :back %>"

Med det som er gjort, må du hviteliste avatar for å utarbeide og legge til en avatar-kolonne i brukertabellen. Fra din terminal, kjør migrering for å legge til en ny avatar-kolonne.

"rails

skinner g migrasjon add_avatar_to_users avatar: string rake db: migrere "

Legg til CarrierWave-avataren til brukermodellen din. Modellen din skal se slik ut:

"rails modeller / user.rb

klassen bruker < ActiveRecord::Base mount_uploader :avatar, AvatarUploader

utarbeide: database_authenticatable,: registrerbar,: recoverable,: rememberable,: trackable,: validatable

# User Avatar Validation validates_integrity_of: avatar validates_processing_of: avatar

private def avatar_size_validation errors [: avatar] "" skal være mindre enn 500KB "hvis avatar.size> 0.5.megabytes end end"

I koden ovenfor har du lagt til en mount_uploader linje på toppen av Bruker klasse. Det er også en validering for å kontrollere integriteten og behandlingen av avataren, sammen med en metode for å sikre at ikke noe bilde større enn 500 KB blir lastet opp.

Du må legge til avatar, avatar_cache, og remove_avatar til listen over tilgjengelige attributter. Å gjøre dette er enkelt, bare åpne opp din application_controller.rb og få det til å se slik ut:

"rails app / kontrollere / 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, hvis:: devise_controller?

beskyttet

def configure_permitted_parameters devise_parameter_sanitizer.for (: sign_up) | u | u.permit (: brukernavn,: e-post,: passord,: password_confirmation,: remember_me,: avatar,: avatar_cache) devise_parameter_sanitizer.for (: account_update) | u | u.permit (: brukernavn,: passord,: password_confirmation,: current_password,: avatar,: avatar_cache,: remove_avatar) slutten "

Med det gjort, er du klar til å integrere CarrierWave.

Konfigurere CarrierWave

Bruk tekstredigeringsprogrammet til å navigere til config / initializers og opprett en fil som heter carrier_wave.rb. Lim inn koden under:

skinner *** config / initialiserer / carrier_wave.rb ***

skinner krever 'carrierwave / orm / activiverecord'

Dette er initialisatoren som trengs for å laste CarrierWave etter ActiveRecord.

Fra din terminal, generer en opplaster:

skinner skinner generere opplasteren Avatar

Dette vil opprette en ny katalog som heter opplastere i appmappen og en fil som er innkalt avatar_uploader.rb. Jeg har redigert innholdet i filen for å se ut som det jeg har under:

"rails

app / opplastere / avatar_uploader.rb

koding: utf-8

klasse AvatarUploader < CarrierWave::Uploader::Base

Inkluder CarrierWave :: MiniMagick

# Velg hvilken type lagring som skal brukes for denne opplasteren: lagring: tåke

# Overstyr katalogen der opplastede filer skal lagres. # Dette er en fornuftig standard for opplastere som skal monteres: def store_dir "opplastinger / # model.class.to_s.underscore / # mounted_as / # model.id" slutten

# Opprett forskjellige versjoner av de opplastede filene dine: versjon: tommelfingerprosess: resize_to_fill => [100, 100] slutten

versjon: medium prosess: resize_to_fill => [300, 300] end

versjon: liten prosess: resize_to_fill => [140, 140] ende

# Legg til en hvit liste over utvidelser som kan lastes opp. # For bilder kan du bruke noe slikt: Def extension_white_list% w (jpg jpeg gif png) sluttend "

Du trenger MiniMagick linje for å generere forskjellige versjoner av et bilde. Jeg inkluderte tre versjoner av bilder. MiniMagick gjør resizing i denne versjonen mulig. Den siste kodeblokken sikrer at ingen filutvidelser bortsett fra de som er oppført her lastes opp.

AWS Setup

For denne opplæringen vil vi laste opp bildene våre til Amazon Web Services. Hvis du ikke har en konto enda, hopp over til registreringssiden og opprett en gratis konto.

Når du er ferdig med det, må du lage en bøtte for å lagre bildene dine. Når det, velg Lag bøtte for å åpne dialogboksen. Skriv inn et navn for bøtte og velg en region. Når du er ferdig, velg Skape.

Åpne Gemfile og legg til denne perlen, og bunt installasjon når ferdig.

skinner perle 'figaro'

Fra terminalen din, løp bunt exec figaro installere. Dette vil skape en ny fil config / application.yml og legg det til søknaden din .gitignore. Du trenger denne filen for å holde AWS-tilgangs-ID og hemmelig nøkkel sikker.

For å finne AWS-tilgangs-ID og hemmelig nøkkel, gå til Amazon Web Services og klikk på navnet på kontoen din, som ligger i høyre hjørne av konsollen.

Fra rullegardinmenyen, velg Sikkerhetserklæringer, og klikk på Fortsett til Security Credentials knapp. På siden som vises, velg Tilgangstaster (Access-nøkkel-ID og Secret Access Key). Klikk på Opprett ny tilgangsnøkkel knappen for å generere en ny nøkkel, og kopiere den til en editor.

I tekstredigeringsprogrammet, naviger til config / application.yml og lim inn i følgende:

"rails config / application.yml

aws_access_id: Skriv inn tilgang_id her aws_access_secret_key: Skriv inn access_key her "

Erstatt linjene som angitt ovenfor.

Navigere til config / initializers, opprett en fil som heter storage.rb, og lim inn i følgende:

"rails konfig / initializers / storage.rb

CarrierWave.configure do | config | config.storage =: fog config.fog_credentials = leverandør: 'AWS', aws_access_key_id: ENV ["aws_access_id"], aws_secret_access_key: ENV ["aws_access_secret_key"], region: 'us-west-2' config.fog_directory = " tutsplus-avatar "config.fog_public = false end"

I henhold til konfigurasjonen ovenfor er regionen for min bøtte oss-vest-2, og bøtteens navn er tutsplus-avatar. Erstatt det med informasjon om bøtte.

Start opp din skinner server og pek nettleseren din til http: // localhost: 3000 / brukere / sign_up.

Angi en standard avatar

I søknaden din vil du kanskje angi en standard avatar for brukere som velger å ikke laste opp en avatar. Å gjøre dette er enkelt.

Opprett en mappe i app / eiendeler / bilder kalt falle tilbake og slipp standardbildet ditt i det. Bruk tekstredigeringsprogrammet til å navigere til app / opplastere / avatar_uploader.rb og lim inn koden under:

"rails app / opplastere / avatar_uploader.rb

def default_url (* args) ActionController :: Base.helpers.asset_path ("fallback /" + [version_name, "default-avatar.gif"]. compact.join ('_')) avslutte "

Pass på at du endrer default-avatar.gif til navnet på bildet ditt.

Konklusjon

Nå vet du hvordan du aktiverer bildeopplasting for brukerne. Dette legger til en viktig funksjon for din skinnerapplikasjon. Jeg håper du hadde det gøy. I neste del vil vi se på PaperClip. Din tilbakemelding er velkommen.