Ruby on Rails
Ansichten
Suche…
Teilstücke
Teilvorlagen (Partials) sind eine Möglichkeit, den Rendering-Prozess in überschaubarere Abschnitte zu unterteilen. Mit Partials können Sie Code-Teile aus Ihren Vorlagen extrahieren, um Dateien zu trennen und sie auch in Ihren Vorlagen wiederzuverwenden.
Um einen Teil zu erstellen, erstellen Sie eine neue Datei, die mit einem Unterstrich beginnt: _form.html.erb
Verwenden Sie zum Rendern eines Teils als Teil einer Ansicht die Render-Methode in der Ansicht: <%= render "form" %>
- Beachten Sie, dass der Unterstrich beim Rendern ausgelassen wird
- Ein Teil muss mit seinem Pfad gerendert werden, wenn es sich in einem anderen Ordner befindet
Um eine Variable in den Teil als lokaler Variable, verwenden Sie diese Notation übergeben:
<%= render :partial => 'form', locals: { post: @post } %>
Partials sind auch nützlich, wenn Sie genau denselben Code wiederverwenden müssen ( DRY-Philosophie ).
Um beispielsweise <head>
-Code wiederzuverwenden, erstellen Sie einen partiellen Namen namens _html_header.html.erb
, geben Sie Ihren <head>
-Code ein, der wiederverwendet werden soll, und rendern Sie den partiellen Code bei Bedarf durch: <%= render 'html_header' %>
.
Objektpartials
Objekte, die auf to_partial_path
antworten, können auch gerendert werden, wie in <%= render @post %>
. Standardmäßig handelt es sich bei ActiveRecord-Modellen so etwas wie posts/post
@post
tatsächlich rendern, werden die Dateien views/posts/_post.html.erb
gerendert.
Ein lokal benannter post
wird automatisch zugewiesen. Am Ende ist <%= render @post %>
eine kurze Hand für <%= render 'posts/post', post: @post %>
.
to_partial_path
können auch Sammlungen von Objekten bereitgestellt werden, die auf to_partial_path
antworten, beispielsweise <%= render @posts %>
. Jedes Element wird nacheinander gerendert.
Globale Partials
Um ein globales Partial zu erstellen, das überall verwendet werden kann, ohne auf den genauen Pfad zu verweisen, muss das Partial in den views/application
. Das vorige Beispiel wurde unten geändert, um diese Funktion zu veranschaulichen.
Dies ist beispielsweise ein Pfad zu einem globalen Teil von app/views/application/_html_header.html.erb:
Verwenden Sie <%= render 'html_header' %>
um dieses globale Teil überall <%= render 'html_header' %>
AssetTagHelper
In den meisten Fällen, in denen Sie integrierte Helfer verwenden möchten, lassen Sie Assets (css / js / images) automatisch und korrekt verknüpfen. ( Offizielle Dokumentation )
Bildhelfer
Bildpfad
Dadurch wird der Pfad zu einem Bildasset in app/assets/images
.
image_path("edit.png") # => /assets/edit.png
Bild URL
Dadurch wird die vollständige URL zu einem Bildasset in app/assets/images
.
image_url("edit.png") # => http://www.example.com/assets/edit.png
image_tag
Verwenden Sie diesen Helfer, wenn Sie einen <img src="" />
-Tag in die Quellgruppe aufnehmen möchten.
image_tag("icon.png") # => <img src="/assets/icon.png" alt="Icon" />
JavaScript-Helfer
javascript_include_tag
Wenn Sie eine JavaScript-Datei in Ihre Ansicht aufnehmen möchten.
javascript_include_tag "application" # => <script src="/assets/application.js"></script>
Javascript_Pfad
Dies gibt den Pfad Ihrer JavaScript-Datei zurück.
javascript_path "application" # => /assets/application.js
javascript_url
Dies gibt die vollständige URL Ihrer JavaScript-Datei zurück.
javascript_url "application" # => http://www.example.com/assets/application.js
Stylesheet-Helfer
stylesheet_link_tag
Wenn Sie eine CSS-Datei in Ihre Ansicht aufnehmen möchten.
stylesheet_link_tag "application" # => <link href="/assets/application.css" media="screen" rel="stylesheet" />
stylesheet_path
Dies gibt den Pfad Ihres Stylesheet-Assets zurück.
stylesheet_path "application" # => /assets/application.css
stylesheet_url
Dies gibt die vollständige URL Ihres Stylesheet-Assets zurück.
stylesheet_url "application" # => http://www.example.com/assets/application.css
Verwendungsbeispiel
Beim Erstellen einer neuen Schienen-App stehen Ihnen automatisch zwei dieser Helfer in app/views/layouts/application.html.erb
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
Dies gibt aus:
// CSS
<link rel="stylesheet" media="all" href="/assets/application.self-e19d4b856cacba4f6fb0e5aa82a1ba9aa4ad616f0213a1259650b281d9cf6b20.css?body=1" data-turbolinks-track="reload" />
// JavaScript
<script src="/assets/application.self-619d9bf310b8eb258c67de7af745cafbf2a98f6d4c7bb6db8e1b00aed89eb0b1.js?body=1" data-turbolinks-track="reload"></script>
Struktur
Als Rails die M V C Muster folgt Views
sind , wo Ihre „Vorlagen“ für Ihre Handlungen sind.
Nehmen wir an, Sie haben einen Controller articles_controller.rb
. Für diesen Controller haben Sie einen Ordner in Ansichten, der als app/views/articles
:
app
|-- controllers
| '-- articles_controller.rb
|
'-- views
'-- articles
| |- index.html.erb
| |- edit.html.erb
| |- show.html.erb
| |- new.html.erb
| '- _partial_view.html.erb
|
'-- [...]
Diese Struktur ermöglicht es Ihnen, für jeden Controller einen Ordner zu erstellen. Beim Aufruf einer Aktion in Ihrem Controller wird die entsprechende Ansicht automatisch gerendert.
// articles_controller.rb
class ArticlesController < ActionController::Base
def show
end
end
// show.html.erb
<h1>My show view</h1>
Ersetzen Sie HTML-Code in Ansichten
Wenn Sie schon einmal den HTML-Inhalt ermitteln wollten, der zur Laufzeit auf einer Seite gedruckt werden soll, bietet rail eine sehr gute Lösung dafür. Es hat etwas namens content_for , mit dem wir einen Block an eine Schienenansicht übergeben können. Bitte überprüfen Sie das Beispiel unten.
Deklarieren Sie content_for
<div>
<%= yield :header %>
</div>
<% content_for :header do %>
<ul>
<li>Line Item 1</li>
<li>Line Item 2</li>
</ul>
<% end %>
HAML - eine alternative Möglichkeit, Ihre Ansichten zu verwenden
HAML (HTML Abstraction Markup Language) ist eine schöne und elegante Möglichkeit, den HTML-Code Ihrer Ansichten zu beschreiben und zu gestalten. Anstatt Tags zu öffnen und zu schließen, verwendet HAML die Einrückung für die Struktur Ihrer Seiten. Wenn etwas in ein anderes Element eingefügt werden soll, wird es einfach mit einem Tabulator eingerückt. In HAML sind Registerkarten und Leerzeichen wichtig. Stellen Sie daher sicher, dass Sie immer dieselbe Anzahl von Registerkarten verwenden.
Beispiele:
#myview.html.erb
<h1><%= @the_title %></h1>
<p>This is my form</p>
<%= render "form" %>
Und in HAML:
#myview.html.haml
%h1= @the_title
%p
This is my form
= render 'form'
Sie sehen, die Struktur des Layouts ist viel klarer als die Verwendung von HTML und ERB.
Installation
Installieren Sie einfach den Edelstein mit
gem install haml
und füge den Edelstein zum Gemfile hinzu
gem "haml"
Für HAML anstelle von HTML / ERB verwenden, ersetzen nur die Dateierweiterungen Ihrer Ansichten von something.html.erb
something.html.haml
.
Schnelle Tipps
Gemeinsame Elemente wie divs können kurz geschrieben werden
HTML
<div class="myclass">My Text</div>
HAML
%div.myclass
HAML, Abkürzung
.myclass
Attribute
HTML
<p class="myclass" id="myid">My paragraph</p>
HAML
%p{:class => "myclass", :id => "myid"} My paragraph
Ruby-Code einfügen
Sie können Ruby-Code mit den = und - Zeichen einfügen.
= link_to "Home", home_path
Code, der mit = beginnt, wird ausgeführt und in das Dokument eingebettet.
Code, der mit - beginnt, wird ausgeführt, aber nicht in das Dokument eingefügt.
Vollständige Dokumentation
HAML ist sehr einfach zu beginnen, aber auch sehr komplex. Ich empfehle Ihnen, die Dokumentation zu lesen .