codificare utf-8

În prima parte a acestei serii, ați învățat cum să utilizați CarrierWave în aplicația Rails. În această a doua parte, veți afla cum să activați încărcarea imaginilor pentru utilizatorii dvs. utilizând Devise. Devise este o soluție de autentificare pentru Rails. Veți învăța, de asemenea, cum să utilizați ceață, o bibliotecă de servicii Ruby cloud care va permite aplicației dvs. să se conecteze la serviciile Amazon Web Services.

Vorbește destul - să mergem la afaceri.

Rails Application Setup

Generează noua aplicație pentru șine:

șine șine noi myapp

Deschide-ți Gemfile și adăugați următoarele pietre:

"șine Gemfile

bijuterie gem carrierwave bijuterie gem mini_magick ceață "

Alerga instalare pachet pentru a instala pietre.

Din terminalul dvs., creați un Controlul paginilor:

șine de cale ferată g controler Index pagini

Navigheaza catre config / routes.rb și adăugați o cale rădăcină:

"șine config / routes.rb

rădăcină la: "pagini # index"

Generați și configurați Devise

Funcția de încărcare va fi integrată în modelul nostru de utilizatori pentru ca utilizatorii să încarce avatare. Din terminalul dvs., instalați-o pe:

șinele șinelor generează proiectarea: instalați

Generatorul va instala un inițializator care descrie toate din opțiunile de configurare ale lui Devise. Deschide app / opinii / machete / application.html.erb în editorul de text și adăugați următorul cod deasupra Randament bloc:

"șine app / opinii / machete / application.html.erb

<%= notice %>

<%= alert %>

"

În acest moment puteți genera modelul de utilizator:

șinele șinelor generează un utilizator

Apoi, migrează baza de date:

rails rake db: migrați

Va trebui să editați vizualizări concepute, deci este important să le generați:

șinele șinelor generează concepte: vederi

Și asta va face magia.

Utilizând editorul de text, deschideți-l app / opinii / elaboreze / înregistrări / new.html.erb și editați-o astfel încât să arate astfel:

"șine app / opinii / elaboreze / înregistrări / new.html.erb

Inscrie-te

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

<%= f.label :email %>
<%= f.email_field :email, autofocus: true %> <%= f.label :password %> <% if @minimum_password_length %> (<%= @minimum_password_length %> caractere minime) <% 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” %>"

Faceți același lucru pentru app / opinii / elaboreze / înregistrări / edit.html.erb:

"șine app / opinii / elaboreze / înregistrări / edit.html.erb

Editați | × <%= 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? %>

În prezent, confirmarea de așteptare pentru: <%= resource.unconfirmed_email %>
<% end %>

<%= f.label :password %> (lăsați necompletat dacă nu doriți să-l schimbați)
<%= 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 %> (avem nevoie de parola actuală pentru a confirma modificările)
<%= f.password_field :current_password, autocomplete: "off" %> <%= f.submit "Update" %>

<% end %>

Anulați contul

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

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

Cu acest lucru, va trebui să creați un avatar alb pentru a crea și a adăuga o coloană avatar la tabelul Utilizator. Din terminalul dvs., rulați migrarea pentru a adăuga o nouă coloană de avatar.

"șine

rails g migrație add_avatar_to_users avatar: rake string db: migrați "

Adăugați avatarul CarrierWave la modelul dvs. de utilizator - modelul dvs. ar trebui să arate astfel:

"șine modele / user.rb

utilizator de clasă < ActiveRecord::Base mount_uploader :avatar, AvatarUploader

concepe: database_authenticatable,: registerable,: recuperabil,: memorabil,: trackable,: validatable

# Validare utilizator Avatar validates_integrity_of: avatar validates_processing_of: avatar

privat def image_size_validation errors [: avatar] "" ar trebui să fie mai mic de 500KB "dacă avatar.size> 0.5.megabytes end end"

În codul de mai sus, ați adăugat a mount_uploader linie în partea de sus a Utilizator clasă. Există, de asemenea, o validare pentru a verifica integritatea și prelucrarea avatarului, alături de o metodă pentru a vă asigura că nu este încărcată nici o imagine mai mare de 500KB.

Trebuie să adăugați Avatar, avatar_cache, și remove_avatar la lista atributelor accesibile. A face acest lucru este ușor - doar deschide-ți application_controller.rb și face ca acesta să arate astfel:

"șine app / controlere / application_controller.rb

class 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, dacă:: devise_controller?

protejat

def configura_permitted_parameters devise_parameter_sanitizer.for (: sign_up) | u | u.permit (: nume utilizator,: email,: parola,: password_confirmation,: remember_me,: avatar,: avatar_cache) devise_parameter_sanitizer.for (: account_update) | u | u.permit (: nume utilizator,: parola,: password_confirmation,: current_password,: avatar,: avatar_cache,: remove_avatar) end end "

Odată cu aceasta, sunteți gata să vă integrați CarrierWave.

Configurarea CarrierWave

Utilizând editorul de text, navigați la config / initializatori și să creați un fișier numit carrier_wave.rb. Inserați codul de mai jos:

rails *** config / initializers / carrier_wave.rb

șinele necesită "carrierwave / orm / activerecord"

Acesta este initializatorul care este necesar pentru încărcarea CarrierWave după ActiveRecord.

Din terminalul dvs., generați un încărcător:

șinele șinelor generează încărcarea Avatar

Acest lucru va crea un nou director numit uploaders în dosarul App și un fișier în interiorul numit avatar_uploader.rb. Am editat conținutul fișierului pentru a arăta cum am mai jos:

"șine

app / uploaderi / avatar_uploader.rb

codificare: utf-8

clasa AvatarUploader < CarrierWave::Uploader::Base

include CarrierWave :: MiniMagick

# Alegeți ce tip de spațiu de stocare să utilizați pentru acest încărcător: stocare: ceață

# Depășiți directorul în care vor fi stocate fișierele încărcate. # Aceasta este o valoare implicită în mod sensibil pentru încărcătoarele care sunt destinate a fi montate: def store_dir "uploads / # model.class.to_s.underscore / # mounted_as / # model.id" sfârșit

# Creați versiuni diferite ale fișierelor încărcate: versiunea: procesul de degetul mare: resize_to_fill => [100, 100] end

versiune: proces mediu: resize_to_fill => [300, 300] sfârșit

versiune: proces mic face: resize_to_fill => [140, 140] sfârșit

# Adăugați o listă albă de extensii cărora li se permite încărcarea. # Pentru imagini puteți folosi ceva de genul: def extension_white_list% w (jpg jpeg gif png) sfârșitul final "

Ai nevoie de MiniMagick pentru a genera versiuni diferite ale unei imagini. Am inclus trei versiuni ale imaginilor. MiniMagick face posibilă redimensionarea în această versiune. Ultimul cod de cod asigură că nu sunt încărcate extensii de fișiere în afară de cele listate aici.

Configurarea AWS

Pentru acest tutorial, vom încărca imaginile noastre la Amazon Web Services. Dacă nu aveți încă un cont, treceți la pagina de înscriere și creați un cont gratuit.

Când ați terminat cu aceasta, va trebui să creați o găleată pentru a stoca imaginile. Când există, alegeți Creați Bucket pentru a deschide caseta de dialog. Introduceți un nume pentru cupă și selectați o regiune. Când ați terminat, selectați Crea.

Deschideți fișierul Gem și adăugați această bijuterie și instalare pachet cand e gata.

rails gem "figaro"

Din terminalul tău, fugi bundle exec figaro install. Acesta va crea un fișier nou config / application.yml și adăugați-o la aplicația dvs. .gitignore. Aveți nevoie de acest fișier pentru a păstra în siguranță codul dvs. de acces AWS și cheia secretă.

Pentru a găsi codul dvs. de acces AWS și cheia secretă, accesați Amazon Web Services și faceți clic pe numele contului dvs., care este situat în colțul din dreapta al consolei.

Din meniul derulant, selectați Instrucțiuni de securitate, și faceți clic pe Continuați cu acreditările de securitate buton. În pagina care se afișează, selectați Taste de acces (ID-ul cheii de acces și cheia de acces secret). Faceți clic pe Creați o nouă cheie de acces pentru a genera o nouă cheie și copiați-o într-un editor.

În editorul de text, navigați la config / application.yml și lipiți în următoarele:

"șine config / application.yml

aws_access_id: Introduceți acces_id aici aws_access_secret_key: Introduceți acces_key aici "

Înlocuiți liniile așa cum este menționat mai sus.

Navigheaza catre config / initializatori, creați un fișier numit storage.rb, și lipiți în următoarele:

"șine config / initializatori / storage.rb

CarrierWave.configure do | config | config.storage_key:: config.fog_credentials = provider: 'AWS', aws_access_key_id: ENV ["aws_access_id"], aws_secret_access_key: ENV ["aws_access_secret_key" tutsplus-avatar "config.fog_public = sfarsit false"

Conform configurației de mai sus, regiunea pentru galeria mea este ne-vest-2, și numele găleții este tutsplus-Avatar. Înlocuiți-l cu informații despre galeata dvs..

Începeți-vă rails server și indicați browserul dvs. http: // localhost: 3000 / utilizatori / sign_up.

Setarea unui avatar implicit

În aplicația dvs., vă recomandăm să setați un avatar implicit pentru utilizatorii care aleg să nu încarce un avatar. Făcând acest lucru este ușor.

Creați un dosar în app / active / imagini denumit da înapoi și aruncați imaginea implicită în ea. Utilizând editorul de text, navigați la app / uploaderi / avatar_uploader.rb și lipiți în codul de mai jos:

"șine app / uploaderi / avatar_uploader.rb

Define default_url (* args) ActionController :: Base.helpers.asset_path ("fallback /" + [version_name, "default-avatar.gif"

Asigurați-vă că vă schimbați default-avatar.gif la numele imaginii tale.

Concluzie

Acum știți cum să activați încărcarea imaginilor pentru utilizatorii dvs. Aceasta adaugă o caracteristică importantă aplicației dvs. pentru șine. Sper ca te-ai distrat. În partea următoare, vom analiza PaperClip. Feedback-ul dvs. este binevenit.

Cod