Ich habe Rails studiert, um den Job in eine webbasierte interne Entwicklungsfirma zu wechseln! Als Teil dieser Studie mache ich die 6. Ausgabe des Rails-Tutorials und ich werde erwähnen, dass ich dachte, dies sei __wichtig & __, um mich zu erinnern.
★ Was ist ein Juwel? ――Das von Ruby Gems veröffentlichte Ruby-Paket
★bundle install
★rails db:migrate
__ Die Asset-Pipeline ist in drei Hauptfunktionen unterteilt (siehe unten). __ __ (* Erklärung ★ Kurze Zusammenfassung)
[Der größte Vorteil der Asset-Pipeline] Für die Effizienz in Produktionsanwendungen optimierte Assets werden ebenfalls automatisch generiert. (= Die Seite wird in der Produktionsumgebung automatisch schneller geladen.)
★ Kurz gesagt, sowohl "Entwicklungsumgebung" als auch "Produktionsumgebung" sind optimiert und es ist die effizienteste / bequemste.
*= require_tree . #app/assets/Ich versuche, alle CSS-Dateien in Stylesheets aufzunehmen
*= require_self #Manifestdatei(application.css)Ich versuche mich einzuschließen
Sporockets liest die obigen Kommentare in der Manifestdatei.
★ Kurz gesagt, die Assets sind zusammengefasst, um die Verwendung im Browser zu vereinfachen.
assert_select "a[href=?]", help_path,
<a href="/help”>...</a>
assert_select "a[href=?]", root_path, count: 2
Anzahl bedeutet, dass es zwei Links zu root_path gibt und zwei getestet werden.
Es gibt verschiedene Möglichkeiten, assert_select anzugeben. Nachfolgend einige typische Beispiele.
--Rails Partials werden aus Effizienzgründen verwendet und Sie können Markups in separaten Dateien ausschneiden.
Aktiver Datensatz: Die Standard-Rails-Bibliothek, die mit der Datenbank interagiert
Verwenden Sie beim Erstellen eines Modells den Befehl Modell generieren. Beispiel) Erstellen eines Benutzermodells mit Attributen wie Name und E-Mail
$ rails generate model User name:string email:string
[Namenskonvention für Schienen]
--user = User.new: Instanz erstellen --user.save: Modell speichern
>> user = User.new(name: "Michael Hartl", email: "[email protected]")
>> user.save
--User.create: So erstellen und speichern Sie ein Modell gleichzeitig über Active Record
>> User.create(name: "Another Sky”, email: "[email protected]")
>> user.name
=> "Michael Hartl"
>> user.email
=> "[email protected]"
>> user.updated_at
=> Mon, 23 May 2016 19:05:58 UTC +00:00
>> User.find(1)
=> #<User id: 1, name: "Michael Hartl", email: "[email protected]",
created_at: "2019-08-22 01:51:03", updated_at: "2019-08-22 01:51:03">
>> User.find_by(email: "[email protected]")
=> #<User id: 1, name: "Michael Hartl", email: "[email protected]",
created_at: "2019-08-22 01:51:03", updated_at: "2019-08-22 01:51:03">
Validierungsfall, der häufig in Active Record verwendet wird
__ So fahren Sie mit testgetriebenen Entwicklungstests fort __
rails test: models: Befehl, nur Tests für Modelle auszuführen
$ rails test:models
Der Migrationsname kann frei angegeben werden. Durch Angabe des Endes (to_users) erstellt Rails automatisch eine Migration, die der Benutzertabelle Spalten hinzufügt.
Beispiel) Führen Sie den folgenden Befehl aus, um eine Migrationsdatei mit dem Namen add_password_digest_to_users zu generieren.
$ rails generate migration add_password_digest_to_users password_digest:string
--Active Record bietet Ihnen viele Methoden zum Erstellen und Bearbeiten von Datenmodellen
"Shared": Partials, die von mehreren Ansichten verwendet werden, sind dedizierte Verzeichnisse
assert_select: Testziel ist CSS ・ Für Klasse → ID Name von div # CSS
assert_select 'div#error_explanation'
Für Klasse → div.CSS Klassenname
assert_select 'div.field_with_errors'
--_ __ HTTP ist ein zustandsloses Protokoll __
--Wenn Sie Benutzerinformationen usw. in einer Webanwendung verwalten, müssen Sie in "Sitzung" separat eine semi-persistente Verbindung zwischen Client und Server festlegen.
Was ist assert_template: Testet, ob die URL nach assert_template die Ansicht rendert.
assert_template 'sessions/new'
Ruby wurde entwickelt, um Null und Falsch zu betrachten und jedes Objekt wahr zu machen. In Ruby||Wenn Sie mehrere Operatoren hintereinander in einem Ausdruck verwenden, werden die Begriffe in der Reihenfolge von links ausgewertet und der Vorgang beendet, wenn er zum ersten Mal wahr wird. Diese Auswertungsmethode wird als Kurzschlussauswertung bezeichnet.
Der Operator __ && __ hat ein ähnliches Design, außer dass der Begriff von links ausgewertet wird und der Prozess endet, wenn er zum ersten Mal false wird.
.& __sicherer Navigationsbetreiber(Oder"Bocchi-Betreiber)__
Sie können Rubys Bocchi-Operator verwenden, um Muster wie obj && obj.method in einer komprimierten Form wie obj & .method zu schreiben.
Als Beispiel den folgenden logischen Operatorcode
```ruby
if user && user.authenticate(params[:session][:password])
Es kann wie folgt vereinfacht werden.
if user&.authenticate(params[:session][:password])
&& user.authentifizieren ist&.Es kann als Authentifizierung vereinfacht werden.
Ist es nicht zu einfach für einen Ruby-Anfänger? Ich bin ein wenig verwirrt,
Es scheint, dass der Bocchi-Operator häufig verwendet wird, sodass Sie sich anscheinend anstrengen müssen, um sich selbst daran zu erinnern.
#### 8.4.1 Zusammenfassung dieses Kapitels
- Sie können die Rails'``` session``` -Methode verwenden, um den Status zum Zeitpunkt des Seitenübergangs beizubehalten. Sie können auch Cookies verwenden, um den temporären Status beizubehalten. (* Da alle Browser in Zukunft das Teilen domänenübergreifender Cookies verbieten, können Sie die in der Rakuten ○ -Domäne erworbene Rakuten-ID usw. nicht in einer anderen Domäne (einer anderen Domäne als Rakuten) verwenden.)
- Sie können die Benutzer-ID usw. vorübergehend im Browser speichern, indem Sie die Methode "Sitzung" verwenden.
- Test Driven Development (TDD) ist nützlich, um Regressionsfehler zu verhindern
- Mit Integration Strike können Sie testen, ob Routing, DB-Updates und Layoutänderungen erfolgreich durchgeführt werden
## Kapitel 9 Weiterentwicklung des Anmeldemechanismus
#### 9.1.1 Speichertoken und Verschlüsselung
Es gibt vier bekannte Möglichkeiten, Cookies zu stehlen.
1. Extrahieren Sie Cookies mit einer speziellen Software namens Packet Sniffer direkt aus Netzwerkpaketen, die ein schlecht verwaltetes Netzwerk durchlaufen.
2. Extrahieren Sie das Speichertoken aus der Datenbank
3. Verwenden Sie Cross-Site-Scripting (XSS).
4. Stehlen Sie den Zugriff, indem Sie den PC oder das Smartphone, auf dem der Benutzer angemeldet ist, direkt bedienen
Die Gegenmaßnahme von 1. besteht darin, die Site mit 7.5 SSL zu unterstützen
Entsprechung von 2. In diesem Lernprogramm wird das Speicher-Token in der Datenbank als __hashing__ gespeichert.
Die Korrespondenz von 3. wird automatisch in Rails behandelt
4. Es ist dem System unmöglich, grundlegende Verteidigungsmaßnahmen zu ergreifen
■ Verwendung von attr_accessor
Wenn Sie die Attribute eines Objekts definieren möchten, die gelesen und geschrieben werden können
-Wie man ein Benutzerobjekt mit Attributname und Beschreibung definiert
Für Schienen
```ruby
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :description
t.timestamps null: false
end
end
end
Für reinen Ruby-Code, der keine DB verarbeitet
class User
attr_accessor :name, :description
end
Übrigens wird "attr_reader" verwendet, wenn Sie schreibgeschützte Attribute definieren möchten.
attr_writer
Wird verwendet, wenn Sie schreibgeschützte Attribute definieren möchten.
"Es gibt 10 Arten von Menschen auf dieser Welt. Jemand, der Binär versteht, und einige, die Binär nicht verstehen" ist ein alter Witz in der Branche. Es ist wie bei Roland (lacht). Vielleicht ist Roland von hier aus festgefahren? ??
■ Trinity-Operator Der folgende wenn sonst Code
if boolean?
var = foo
else
var = bar
end
Kann wie folgt gekürzt werden
var = boolean? ? foo : bar
Wir verwenden häufig den ternären Operator als Rückgabewert einer Methode.
assert_equal
Ist
assert_equal <expected>, <actual>
target="_blank"
Verwenden Sie diese Option, um eine Verknüpfung zu einer neuen Registerkarte herzustellen(Oder Fenster)Dies ist ein nützliches Element beim Verknüpfen mit einer anderen Website, da diese in geöffnet wird.
★ Persönlich bin ich mit einem anderen Tab zufrieden, wenn ich zum Link-Ziel springe. Wenn ich ihn implementiere, möchte ich ihn definitiv implementieren!
Persönlich denke ich, dass Websites für PCs (vorausgesetzt, PCs sind die Hauptkunden) auf jeden Fall eingeführt werden sollten!
<a href="https://gravatar.com/emails" target="_blank">change</a>
Rails verwendet `form_with (@user)`
, um ein Formular zu erstellen, und wenn
@ user.new_record? `` Ist
true```, ist es
POST```. , ``
PATCH``` wenn` false
.
In __ * Tutorial wird user anstelle von @user verwendet. Wenn Sie es jedoch verwenden, tritt in users_login_test ein Fehler auf. Verwenden Sie daher @user. __ __
sessions_controller.rb
def create
@user = User.find_by(email: params[:session][:email].downcase) #Deklarieren Sie den im Parameter-Hash empfangenen E-Mail-Wert, übergeben Sie ihn an das E-Mail-Attribut, suchen Sie den Benutzer mit demselben E-Mail-Wert im Benutzermodell und weisen Sie ihn der Benutzervariablen zu.
if @user && @user.authenticate(params[:session][:password]) #Die Benutzervariable ist in der Datenbank vorhanden, und der im Parameter-Hash empfangene Kennwortwert entspricht dem E-Mail-Wert des Benutzers.(Wenn das Passwort und die E-Mail-Adresse den gleichen Wert haben)true
log_in @user # sessions_Hilfsprotokoll_Führen Sie die in-Methode aus und verwenden Sie den Benutzer der Sitzungsmethode_ID an ID senden (als temporäre Cookies im Browser gespeichert)
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user) #Erinnern Sie sich an die Sitzung beim Anmelden_Ich Attribut ist 1(Kontrollkästchen ist aktiviert)Wenn ja, zerstören Sie die Sitzung dauerhaft, andernfalls zerstören Sie die dauerhafte Sitzung
redirect_back_or @user #Weiterleiten zur vorherigen Seite des Benutzers oder Standard
else
flash.now[:danger] = 'Invalid email/password combination' #Zeigen Sie eine Flash-Nachricht an und deaktivieren Sie sie, wenn eine neue Anforderung auftritt
render 'new' #Neue Ansichtsausgabe
end
end
Error:
UsersLoginTest#test_login_with_remembering:
NoMethodError: undefined method `remember_token' for nil:NilClass
test/integration/users_login_test.rb:60:in `block in <class:UsersLoginTest>'
`Rails db: seed``` löscht die Beispieldaten in`
db / seeds.rb``` in die DB.render @ users``` ausführen, verweist es automatisch auf den Teil
`_user.html.erb``` und zeigt jeden Benutzer als Sammlung an.Ablauf der Benutzeraktivierung
assigns
Mit Methoden können Sie in der entsprechenden Aktion auf Instanzvariablen zugreifen.
Zum Beispiel hat die Aktion `create``` des Users-Controllers eine Instanzvariable`
@ user```, aber wenn Sie im Test `assigns (: user)`
schreiben, ist dies die Benutzerinstanzvariable Sie können darauf zugreifen.
Ich habe einen Testfehler erhalten. .. Lesen Sie diesen Teratail-Artikel und verwenden Sie den folgenden Code
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
if user.activated?
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user
else
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:warning] = message
redirect_to root_url
end
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
Es gelang mir, das Folgende zu tun ~
def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
if @user.activated?
log_in @user
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
redirect_back_or @user
else
message = "Account not activated. "
message += "Check your email for the activation link."
flash[:warning] = message
redirect_to root_url
end
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
-Die Zuweisungsmethode ist eine Methode, die die Instanzvariablen des Controllers testet. Übergeben Sie die Instanzvariable als Argument als Symboltyp. Dadurch erhalten Sie Zugriff auf die Instanzvariablen und können diese testen.
@user = assigns(:user)
■Active Storage Bilder können mithilfe von Active Storage einfach verarbeitet werden, und das den Bildern zugeordnete Modell kann frei angegeben werden. Active Storage ist äußerst vielseitig und kann verschiedene Binärdateien wie Nur-Text-, PDF- und Audiodateien verarbeiten.
Das erste, was Sie über die Active Storage-API wissen müssen, ist die Methode has_one_attached. Dies wird verwendet, um das angegebene Modell der hochgeladenen Datei zuzuordnen. Mit has_one_attached kann das angegebene Modell der hochgeladenen Datei zugeordnet werden. Im Fall von has_one_attached "1 Bild pro Microsoft", Sie können has_many_attached verwenden, um "mehrere Bilder pro Microsoft" anzuhängen.
--Rails unterstützt mehrere Schlüsselindizes
@user ||= current_user
Der obige Code bewirkt nichts, wenn `` @ user nicht Null ist, und weist current_user` `@ user
zu, wenn er Null ist.
--has_many: Mit können Sie komplexe Datenbeziehungen modellieren
Methode | Erläuterung |
---|---|
assert_template(expected, message = nil) | Stellen Sie sicher, dass die in der Aktion angegebene Vorlage dargestellt ist |
assert_not( test, [msg] ) | __test__Aber__false__Überprüfen Sie, ob. |
assert_select "div.nav" | selector(div)Der Inhalt des Elements, das dem Argument Gleichheit entspricht(nav)Überprüfen Sie bei |
■ __ "!!" (gelesen als "Bang Bang") __ Ein Operator, der ein Objekt in einen Booleschen Wert konvertieren kann. Null wird falsch sein.
>> !!nil
=> false
Alle anderen Ruby-Objekte sind wahr, sogar Null.
>> !!0
=> true
■! Über das Überraschungszeichen (Ausrufezeichen) ◆ Mit der Markierung! Können Sie die Daten direkt ändern (Attribut ~ ~). Wenn Sie ★ nicht verwenden!
before_save { self.email = email.downcase }
Bei Verwendung von ★!
before_save { email.downcase! }
Sie können exception auslösen, indem Sie ◆! Zu einer Methode hinzufügen! !! Beispiel mit erstellen, speichern. Ohne! (Speichern erstellen) -Wenn der Prozess ausgeführt wird und das Erstellen / Speichern des Datensatzes fehlschlägt, wird `` `nil``` zurückgegeben. Beim Hinzufügen! (Erstellen! Speichern!) Eine Ausnahme (z. B. "ActiveRecord :: RecordNotFound ERROR") kann ausgelöst werden.
■ HTML __type = "E-Mail" __ Mit __type = "email" __ in HTML wird durch Tippen auf das Eingabeformular von Ihrem Mobiltelefon aus eine spezielle Tastatur angezeigt, die für Ihre E-Mail-Adresse optimiert ist.
■ `private
`Schlüsselwort
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
■ << Bediener (Schaufelbediener)
<<
Sie können es am Ende des Arrays mit hinzufügen.
user.following << other_user
Es hat eine ganze Weile gedauert. .. Es dauerte ungefähr einen Monat, obwohl Cloud9-Fehler auftraten. .. Ich denke, es kann nicht geholfen werden, weil es ziemlich umfangreich war, aber es gibt Leute, die es früher beenden, also werde ich Portfolio früher fertig machen! !!
Danke fürs Lesen! !!
Recommended Posts