ActiveRecord: Klasse einer Model-Instanz ändern

ActiveRecord erlaubt das direkte Ändern der Klasse einer Model-Instanz mittels #becomes. Dies kann zum Beispiel hilfreich sein, wenn man für einen Spezialfall weitere Funktionen oder Validierungen zu einem Model hinzufügen will: > company = Company.last > company.persisted? => true > company.valid? => true > company = company.becomes(RestrictedCompany) > company.is_a?(RestrictedCompany) => true > company.is_a?(Company) => true >… ActiveRecord: Klasse einer Model-Instanz ändern weiterlesen

Action-Mailer-Previews im Spec-Verzeichnis

Die Mailer-Previews in Rails 4 sind ein Segen. Wer Rspec statt der üblichen Testsuite verwendet kann das Verzeichnis von test in spec ändern, so dass alle Testdateien zusammen bleiben: # config/application.rb # … config.action_mailer.preview_path = „#{Rails.root}/spec/mailers/previews“ Nach einem Serverneustart sollten die Previews gefunden werden: # spec/mailers/previews/user_mailer_preview.rb class UserMailerPreview < ActionMailer::Preview def send_invitation UserMailer.send_invitation(Invitation.first!) end end Die Vorschau kann… Action-Mailer-Previews im Spec-Verzeichnis weiterlesen

Rails 4: Already initialized constant APP_PATH?

Ein Fehler, der mir in Rails-4-Projekten öfter unterkommt: bin/rails:6: warning: already initialized constant APP_PATH Dies deutet auf ein Problem mit Spring hin. Es kann daher helfen, die Projekt-Binaries neu zu generieren: rake rails:update:bin Dies ist oft schon die Lösung oder sollte zumindest eine Fehlermeldung liefern, anhand derer man das tatsächliche Problem finden kann.

Suchstatus in ActiveAdmin deaktivieren

Der Suchstatus des Active-Admin-Masters funktioniert momentan fehlerhaft. Weder Scope-Namen noch Ransack-Suchen werden korrekt übersetzt. Da ich das Konzept ohnehin nicht sonderlich gewinnbringend finde, schalte ich es zentral im Active-Admin-Initializer ab: Wer das Konzept, wie ich, nicht sonderlich gewinnbringend und eines umständlichen Workarounds wert findet, kann es zentral im Initializer von ActiveAdmin abschalten: # config/initializers/active_admin.rb ActiveAdmin.setup do |config|… Suchstatus in ActiveAdmin deaktivieren weiterlesen

ActiveAdmin: Authentifizierung für Browser und API

Eine einfache API-Authentifizierung lässt sich in ActiveAdmin durch Wiederverwendung des Standard-Admin-Users im Initializer erreichen: # config/initializers/active_admin.rb ActiveAdmin.setup do |config| config.prepend_before_filter do if active_admin_config.namespace.name == :api authenticate_or_request_with_http_basic(‚API‘) do |name, password| user = AdminUser.find_by_email!(name) sign_in(:admin_user, user) if user.valid_password?(password) end end end Dies erlaubt die Angabe des Benutzernamens und Passworts im Browser als Popup (HTTP-Basic-Authentication) und als Header… ActiveAdmin: Authentifizierung für Browser und API weiterlesen

API-Namespace für ActiveAdmin

In ActiveAdmin kann man neben dem Standard weitere Namespaces definieren. Hierfür wird bei der Ressourcen-Registrierung die entsprechende Option angegeben: # app/admin/api/my_resource.rb ActiveAdmin.register MyResource, namespace: :api do # … Das Namespace-Verzeichnis kann unter app/admin abgelegt werden, ohne das „admin“ Teil der URL, des Controller-Namens o. ä. wird: rake routes # … api_my_resources GET /api/my_resources(.:format) api/my_resources#index # …

Idee für DB2CSV2DB

Egal welch schöne Verwaltungsoberflächen man strickt, manchmal ist es einfach angenehmer den Datenbankinhalt in den Editor zu schieben, dort zu Suchen und Ersetzen und das Ergebnis wieder in die Datenbank zu schieben. Ich denke da an einen einfachen Query-Generator, der die Tabelle als CSV in einer Textarea ausgibt und diese direkt als Update akzeptiert:

ActiveAdmin: Standard-Datumsformat ändern

ActiveAdmin erkennt und formatiert die meisten Zeit- und Datumsangaben. In Tabellen kann es jedoch störend sein, wenn das Datum mit dem ausgeschriebenen Wochentag beginnt: Es frisst Platz und sorgt aufgrund unterschiedlicher Länge vor allem in Tabellen für eine ungleichmäßige Ausrichtung. Mit den Standardeinstellungen von ActiveAdmin und Rails-I18n ist das leider der Fall. Ich ändere das Format… ActiveAdmin: Standard-Datumsformat ändern weiterlesen

ActiveAdmin verstehen: Von der Application zur ResourceDSL

ActiveAdmin ist gut dokumentiert und auch ohne Verständnis der Interna gut zu benutzen. Spätestens wenn man eigene Erweiterungen schreiben möchte, muss man aber verstehen, wie die Engine funktioniert. Ein Anfang für Version 1.0.0.pre1: Das Modul ActiveAdmin realisiert mittels class << self eine singleton-ähnliche Instanz von ActiveAdmin::Application: module ActiveAdmin class << self def application @application ||=… ActiveAdmin verstehen: Von der Application zur ResourceDSL weiterlesen

Require und Rails

Rails‘ Autoloading macht einen guten Job, so dass man Abhängigkeiten selten per Hand auflösen muss. Will man aber etwa eine bestehende Modelklasse aus einer Engine öffnen um eigenen Code zu ergänzen, so muss das Original notwendigerweise vorhanden sein: # userengine/app/models/user class User < ActiveRecord::Base belongs_to :user_group end # railsapp/app/models/user require User::Engine.root.join(‚app‘, ‚models‘, ‚user‘) class User < ActiveRecord::Base… Require und Rails weiterlesen