Ruby on Rails
Visningar
Sök…
Partials
Partiella mallar (partier) är ett sätt att dela återgivningsprocessen till mer hanterbara bitar. Partials tillåter dig att extrahera kodbitar från dina mallar för att separera filer och också återanvända dem i dina mallar.
För att skapa ett partiellt skapar du en ny fil som börjar med en understruk: _form.html.erb
För att återge en del som en del av en vy använder du renderingsmetoden i vyn: <%= render "form" %>
- Observera att understrecket lämnas ut vid rendering
- En del måste återges med sin sökväg om den finns i en annan mapp
Om du vill överföra en variabel till det partiella som en lokal variabel använder du denna notation:
<%= render :partial => 'form', locals: { post: @post } %>
Delar är också användbara när du behöver återanvända exakt samma kod ( DRY-filosofi ).
För att återanvända <head>
-koden, skapar du till exempel ett parti med namnet _html_header.html.erb
, ange din <head>
-kod som ska återanvändas och gör det partiella när det behövs av: <%= render 'html_header' %>
.
Objektpartier
Objekt som svarar to_partial_path
kan också återges, som i <%= render @post %>
. Som standard, för ActiveRecord-modeller, kommer detta att vara något som posts/post
, så genom att faktiskt återge @post
kommer @post
views/posts/_post.html.erb
att återges.
Ett lokalt namngivet post
tilldelas automatiskt. I slutändan är <%= render @post %>
en kort hand för <%= render 'posts/post', post: @post %>
.
Samlingar av objekt som svarar to_partial_path
kan också tillhandahållas, till exempel <%= render @posts %>
. Varje objekt kommer att levereras i följd.
Globala partier
För att skapa ett globalt parti som kan användas var som helst utan att referera till den exakta sökvägen måste partiet vara beläget i views/application
. Det föregående exemplet har modifierats nedan för att illustrera den här funktionen.
Till exempel är detta en sökväg till en global partiell app/views/application/_html_header.html.erb:
<%= render 'html_header' %>
att återge detta globala parti var som helst
AssetTagHelper
För att låta rälsen automatiskt och korrekt länka tillgångar (css / js / bilder) i de flesta fall vill du använda inbyggda hjälpare. ( Officiell dokumentation )
Bildhjälpare
IMAGE_PATH
Detta returnerar sökvägen till en bildtillgång i app/assets/images
.
image_path("edit.png") # => /assets/edit.png
bild URL
Detta returnerar den fullständiga webbadressen till en bildtillgång i app/assets/images
.
image_url("edit.png") # => http://www.example.com/assets/edit.png
image_tag
Använd denna hjälpare om du vill inkludera en <img src="" />
-tagg med källuppsättningen.
image_tag("icon.png") # => <img src="/assets/icon.png" alt="Icon" />
JavaScript-hjälpare
javascript_include_tag
Om du vill inkludera en JavaScript-fil i din vy.
javascript_include_tag "application" # => <script src="/assets/application.js"></script>
javascript_path
Detta returnerar sökvägen för din JavaScript-fil.
javascript_path "application" # => /assets/application.js
javascript_url
Detta returnerar den fullständiga URL: en för din JavaScript-fil.
javascript_url "application" # => http://www.example.com/assets/application.js
Stilbladhjälpare
stylesheet_link_tag
Om du vill inkludera en CSS-fil i din vy.
stylesheet_link_tag "application" # => <link href="/assets/application.css" media="screen" rel="stylesheet" />
stylesheet_path
Detta returnerar sökvägen för din stilarktillgång.
stylesheet_path "application" # => /assets/application.css
stylesheet_url
Detta returnerar den fullständiga webbadressen för din stilarktillgång.
stylesheet_url "application" # => http://www.example.com/assets/application.css
Exempel på användning
När du skapar en ny rails-app kommer du automatiskt att ha två av dessa hjälpare i app/views/layouts/application.html.erb
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
Denna utgångar:
// 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>
Strukturera
Eftersom Rails följer M V C-mönstret Views
är där dina "mallar" är för dina handlingar.
Låt oss säga att du har en controller articles_controller.rb
. För den här kontrollern skulle du ha en mapp i vyer som heter 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
|
'-- [...]
Denna struktur låter dig ha en mapp för varje styrenhet. När du ringer en åtgärd i din styrenhet återges lämplig vy automatiskt.
// articles_controller.rb
class ArticlesController < ActionController::Base
def show
end
end
// show.html.erb
<h1>My show view</h1>
Byt ut HTML-kod i vyer
Om du någonsin ville bestämma html-innehållet som ska skrivas ut på en sida under körning då, har rails en mycket bra lösning för det. Det har något som heter content_for som gör att vi kan skicka ett block till en railsvy. Kontrollera exemplet nedan,
Förklara content_for
<div>
<%= yield :header %>
</div>
<% content_for :header do %>
<ul>
<li>Line Item 1</li>
<li>Line Item 2</li>
</ul>
<% end %>
HAML - ett alternativt sätt att använda i dina åsikter
HAML (HTML-abstraktionsmarkeringsspråk) är ett vackert och elegant sätt att beskriva och utforma HTML för dina vyer. Istället för att öppna och stänga taggar använder HAML indrag för strukturen på dina sidor. I grund och botten, om något ska placeras i ett annat element, indikerar du bara det genom att använda ett flikstopp. Flikar och vitrum är viktiga i HAML, så se till att du alltid använder samma mängd flikar.
Exempel:
#myview.html.erb
<h1><%= @the_title %></h1>
<p>This is my form</p>
<%= render "form" %>
Och i HAML:
#myview.html.haml
%h1= @the_title
%p
This is my form
= render 'form'
Du förstår, strukturen i layouten är mycket tydligare än att använda HTML och ERB.
Installation
Installera bara pärla med
gem install haml
och lägg till pärla till Gemfile
gem "haml"
För att använda HAML istället för HTML / ERB, byt bara ut filändelserna från dina vyer från something.html.erb
till something.html.haml
.
Snabba tippar
Vanliga element som divs kan skrivas på ett kort sätt
html
<div class="myclass">My Text</div>
HAML
%div.myclass
HAML, kortfattad
.myclass
attribut
html
<p class="myclass" id="myid">My paragraph</p>
HAML
%p{:class => "myclass", :id => "myid"} My paragraph
Infoga rubinkod
Du kan infoga rubinkod med = och - tecknen.
= link_to "Home", home_path
Kod som börjar med = kommer att köras och inbäddas i dokumentet.
Kod som börjar med - kommer att köras, men inte infogas i dokumentet.
Fullständig dokumentation
HAML är mycket lätt att börja med, men är också väldigt komplex, så jag rekommenderar att du läser dokumentationen .