Ruby on Rails: Ausgewählte Themen
Aus Wikibooks
[Bearbeiten] Zyklische und alternierende Zeilenformatierung
[Bearbeiten] Problem
Die Zeilen einer Tabelle sollen abwechselnde Hintergrundfarben erhalten.
[Bearbeiten] Lösung
Das Modul ActionView::Helpers::TextHelper bietet mit der cycle-Funktion einen Generator für zyklische Werte an.
[Bearbeiten] Beispiel
Eine Tabelle erhält abwechselnd rote, grüne und blaue Zeilen.
<table>
<% for row in ['Zeile 1', 'Zeile zwei', 'Dritte Zeile', 'Vorletzte Zeile', 'Letzte Zeile' ]%>
<tr style="background-color: <%= cycle 'red', 'green', 'blue' %>;">
<td><%= row %></td>
</tr>
<% end %>
</table>
So sieht es aus:
| Zeile 1 |
| Zeile zwei |
| Dritte Zeile |
| Vorletzte Zeile |
| Letzte Zeile |
[Bearbeiten] Hinweise
- Im allgemeinen sollten Stilvorlagen verwendet werden.
- Der erste Parameter ist der Startwert.
- Bei verschachtelten cycle-Anweisungen sollten diesen ein Name gegeben werden (:name => 'xyz') und der Generator sollte manuell mit reset_cycle zurückgesetzt werden.
[Bearbeiten] Migration und benannte Sql-Schemata
[Bearbeiten] Problem
Das Migration-System von Rails unterstützt keine benannten Sql-Schemata, wie sie beispielsweise von Postgresql unterstützt werden.
[Bearbeiten] Lösung
Die Kommandos create_schema und drop_schema sollen in das Migration-System für Postgresql-Datenbanken integriert werden. Mit den Kommandos sollen benannte Schemata erstellt oder entfernt werden. Die Option force, soll trotz Widersprüchen die Aktion ausführen.
Dazu muss der PostgreSQLAdapter erweitert werden. In einer neu anzulegenden Datei lib/migration_ext.rb werden die neuen Kommandos definiert:
class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter # # Benanntes Schema erstellen. # def create_schema schema_name, options={} # Bei der force-Option wird ein möglicherweise vorhandenes Schema gelöscht drop_schema schema_name, :force => true if options[:force] rescue nil execute "CREATE SCHEMA #{schema_name}" end # # Benanntes Sql-Schema entfernt. # def drop_schema(schema_name, options={}) sql = '' sql << "DROP SCHEMA #{schema_name}" # Die force-Option entfernt das Schema, auch wenn Abhängigkeiten bestehen. sql << ' CASCADE' if options[:force] execute sql end end
In der Datei config/environment.rb wird die Zeile
require 'migration_ext'
am Dateiende ergänzt, so dass Rails die Erweiterung einbindet.
[Bearbeiten] Beispiel
Innerhalb einer Migration kann ein Schema erstellt oder entfernt werden. Die Tabellenkommandos können anschließend auf das Schema zugreifen:
class Sport < ActiveRecord::Migration def self.up create_schema 'sport' create_table 'sport.activities' do |t| t.column 'description', :string t.column 'day', :date end end def self.down drop_table 'sport.activities' drop_schema 'sport', :force => true end end
[Bearbeiten] Hinweise
- Es fehlt die Verallgemeinerung für andere Datenbanken.
- Eleganter ist eine Realisierung als Plugin.

