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.
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'
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
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), :html => multipart:: true) do | f | %> <%= devise_error_messages! %>
<%= f.label :email %><% 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
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: method: :put, multipart: :true ) do |f| %> <%= devise_error_messages! %>
<%= f.label :email %><% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<% 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)<% end %>
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
.
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
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.
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
.
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.
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.