2011-01-17 20 views
1

Hier ist ein Auszug aus der Ruby auf den pragmatischen Programmierer Schienen:Gerüst Generation

Der folgende Befehl auf die neuen Rails nicht funktioniert, im Skript Ordner nur ich die Datei Schiene habe.

ruby script/generate scaffold Product Admin (Product: Model and Admin: Controller) 

Der nächstgelegene ich auf diese Anweisung erhalten kann, wird mit dem folgenden:

rail generate scaffold Product Admin:controller 

aber was ich bekommen ist Produkt ist die Steuerung und Admin ist nicht alles.

Wie kann ich Scaffold Product Admin generieren, wobei das Produkt das Modell und Admin der Controller mit den neuen Rails ist?

+0

Können Sie erklären, was Sie unter "Admin ist der Controller" verstehen? Die Ressourcen von Rails folgen einer Konvention, nach der das Modell und der Controller entsprechend der Ressource benannt werden, die sie repräsentieren. Z.B. Modell: Produkt, Controller: ProductsController – polarblau

+0

Ich möchte ProductsController in admin umbenennen, sollte ich es manuell tun? Oder gibt es einen Befehl, das auf einen Schlag zu versichern? – mabounassif

+0

Haben Sie Namespace in Betracht gezogen? dh. 'Admin :: Produkte' Controller stattdessen. – PeterWong

Antwort

1

Welche Version des Buches haben Sie? Es klingt, als ob Sie die 3. Edition (Rails 2.x) haben und dass Sie Rails 3 auf Ihrem Rechner verwenden, was die script/generate vs. rails generate scaffold Inkonsistenzen erklären würde.

+1

Ich habe gerade die neueste Beta-Version gekauft, alle meine Fragen wurden beantwortet. Das Ganze hat sich geändert. Sie benutzen jetzt Schienen, die Gerüstprodukttitel produzieren: Schnurpreis: Dezimal etc .... – mabounassif

+0

Froh, dass Sie es herausgefunden haben. Rails 3 hat sich ein wenig verändert und ältere Dokumentationen/Bücher werden die Dinge ziemlich verwirrend machen. Als zusätzlichen Tipp können Sie "rails g" anstelle von "rails generate" am Anfang eines Befehls als Abkürzung eingeben. – elithrar

1
rails generate controller Admin 
rails generate model Product 

?

+0

Nein, es funktioniert nicht, da Scaffold Controller und Modelle automatisch mit Datenbankschemas verknüpft. Es sollte etwas anderes sein. – mabounassif

+1

Ich denke, der Controller und das Modell sollten den gleichen Namen haben, wenn sie sich auf das gleiche Datenbankschema beziehen. In diesem Fall sollten Rails ein Scaffold Produkt erzeugen. Wenn Sie die URL des Controllers in admin ändern möchten, können Sie dies in Ihrer routes-Datei tun. – sevenseacat

+0

Es könnte so funktionieren, aber ich denke, es ist ordentlicher, wenn ich diesen magischen Befehl finden könnte. – mabounassif

1

Wenn Sie wirklich Scaffolding dafür verwenden möchten, würde ich vorschlagen, Ihren Controller (Datei + Klassenname) umzubenennen. Aber beachte, wenn z.B. ein Admin Namespace könnte nicht tun, was Sie wollen.

Ihre Struktur wird sich etwas schwerer zu verstehen, wenn Ihr Controller admin controller und das Modell product genannt wird, da die Ressource wie dieses

/admin/  # -> returns all products 
/admin/new # -> form for new product 
/admin/23 # -> product with id 23 

zugreifen müsste, was ich meine?

+0

Ja, ich weiß, es ist komisch, dass das Buch darauf beharrt, den Controller admin zu nennen .... vielleicht sind sie zu faul, um einen anderen Controller neu zu erstellen, und entschieden stattdessen, den von Schienen generierten Controller etwas zu modifizieren. Was jetzt keine so schlechte Idee ist, denke ich daran. :) – mabounassif

+0

Ich habe keinen Zugriff auf das Buch, aber könnte es sein, dass der Controller des Produkts nur von einem Admin-Controller und nicht vom Anwendungs-Controller erbt? – polarblau

0

Es gibt definitiv einige Probleme mit Admin-Scaffold in Rails generieren. Der Punkt der Frage ist, dass der Standard-Rails-Scaffolder-Generator Namespaced-Ressourcen erzeugt, einschließlich Namespaced-Modell, und das ist nicht sehr nützlich, weil Modelle typischerweise für Admin-Bereich und öffentlichen Bereich üblich sind.

Ich war auch mit diesem Problem konfrontiert und fand keine Standardlösung dafür.

Also habe ich rails-admin-scaffold gem erstellt (für jetzt ist es nur Rails 4), die diesen Prozess automatisiert und schrieb an article mit detaillierteren Erklärung. Obwohl meine Antwort wenig veraltet ist, könnte es anderen helfen, eine passende Lösung zu finden.