2 Stimmen

Rails-Anwendung mit 500 Modellen

Ich habe eine Rails-App, in der ich Hunderte von Modellen habe, die nur CRUD-Operationen haben. Ich könnte scaffold/active scaffold verwenden, aber dann habe ich am Ende so viele Dateien in meinem Anwendungsverzeichnis.

Ist es möglich, etwas wie ein generisches Modell, Ansicht und Controller zu tun, um diese zu behandeln, anstatt mit 500 von ihnen in der Anwendung Ordner.

7voto

August Lilleaas Punkte 52649

Ja, sicher.

class GenericCrudController < ApplicationController
  def index
    current_model.find(:all)
  end

  private

  def current_model
    params[:model].constantize = Class.new(ActiveRecord::Base)
  end
end

En current_model Methode wird ein Nachkomme von ActiveRecord::Base auf die Schnelle. Dieser Code ist natürlich sehr einfach.

Update: Dies führt zu einer Beschwerde, dass es keine constantize= Methode. Wahrscheinlich müssen Sie stattdessen etwas Ähnliches tun: Kernel.const_set(params[:model], Class.new(ActiveRecord::Base)) .

1voto

Jim Punkte 5487

Ich werde auf dem aufbauen, was August gesagt hat. Es gibt auch einen Fehler. Er sollte lauten:

  def current_model
    params[:model].constantize
  end

Sie werden wahrscheinlich filtern wollen, was das Modell sein kann, sonst könnte es unübersichtlich werden, wenn Sie irgendwelche privaten Modelle haben, auf die sie keinen Zugriff haben sollten.

Für die Ansicht können Sie prüfen, wie viele Spalten das Modell hat, und die entsprechenden Felder für sie vorbereiten.

0voto

Edwin V. Punkte 1297

Eine andere Möglichkeit ist die Verwendung eines Plugins, das umfangreiche CRUD-Schnittstellen bereitstellt. Ein gutes Beispiel ist ActiveScaffold . Das Erstellen der Schnittstelle ist so einfach wie:

class UsersController < ApplicationController
  active_scaffold :user
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X