Frage

Nicht sicher, ob ich bin die Lektüre dieses richtig, aber es scheint, wie Scaffold wird eine Eins-zu-viele-Beziehung nicht tun in seiner Gänze. wenn ich messages mit Gerüst Zum Beispiel erstellen und dann möchte ich auf jene comments messages (ein message -> viele comments), muss ich gehen und alles ändern. Zum Beispiel, ich habe dies in der comment Ansicht ändern ist new

<% form_for(@comment) do |f| %>

auf diese

<% form_for([@message, @comment]) do |f| %>

und dann die Aktion ändern, um die @message var ... unter anderem einzurichten.

Dies kann derzeit nicht automatisch mit Scaffold getan wird, nicht wahr?

War es hilfreich?

Lösung

Das ist wahr, aber es ist nicht das Ende der Geschichte. Es gibt mindestens zwei Alternativen zu Scaffold, dass beide ganz gut funktionieren und automatisch über die Beziehungen zwischen den Klassen abholen (basierend auf dem Active Beziehung Indikatoren wie has_many). Eine dieser Alternativen ist Optimiertes und der andere ist ActiveScaffold .

Sie sind vor allem hilfreich für in der Eingabe von Daten, die Ihr System das erfordert wird keine Benutzerdaten eingegeben. Zum Beispiel, ich benutze sich für administrative Aufgaben auf Tabellen, in denen kein Punkt gibt es eine komplette Benutzeroberfläche für CRUD in dem Aufbau, wenn eines der Gerüstes Alternativen wird die Arbeit nur gut für ein selten genutztes Feature tun. Sie würden sie nicht wollen, obwohl für Kommentare zu Nachrichten verwendet werden.

Andere Tipps

Ja. Scaffold arbeitet für ein Modell und zugehörige Controller. Es braucht nicht kümmern oder mit Beziehungen arbeiten.

Scaffold Das primäre Ziel ist CRUD auf einem Modell in Gang zu bringen einen Controller und zugehörige Ansichten verwenden. Das ist alles. Jede andere Anforderung wie Beziehungen muss manuell kodiert werden.

Beachten Sie, dass es Projekte wie Hobo für Rails, die es Ihnen ermöglichen, Ihre Felder und Verbände innerhalb des Modells zu halten selbst . Sie können nicht Vereinigungen Gerüst, aber es ist ziemlich nah dran.

Sie enden für diesen Zucker zahlen durch viel mehr von der Anwendung hinter dem Rücken gebaut hat. Statt Ihre eigenen von Walzen, sind subtrahieren Sie in der Regel, was Sie von einer großen Bank von prebuilt Verhalten benötigen.

Sie brauchen keine schweren Schienen Admin Rahmen einer Eins-zu-viele-zu bekommen Beziehungen zu arbeiten.

Sie Gerüste können die meisten der Weg dorthin zu gelangen.

Eine wenig mehr Arbeit in der Steuerung und _form Ansicht werden Ihnen den Rest des Weges dorthin gelangen.

Hier ist, wie ...

Story: Select a beer for a developer

In order to select a beer for a developer
As an admin
I want a mainly scaffolded interface to select that beer

Scenario 1: Select beer for new developer
Given I have clicked the <new> button  and entered the developer's name
When I click the beer dropdown
Then I should be presented with a list of beers to choose from
And that beer will be saved when I click <ok>

Scenario 2: Select a different beer for existing developer
Given I have clicked the <edit> button on the index page for a particular developer
When I click the beer dropdown
Then I should be presented with a list of beers to choose from
And that beer will be saved when I click <ok>

Angenommen, wir haben eine Biere Tabelle:

  create_table "beers", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Und eine Entwickler Tabelle, die einen Fremdschlüssel hat (beer_id) Referenzierung die Bier Tabelle:

  create_table "developers", force: true do |t|
    t.string   "name"
    t.integer  "beer_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Wir verwenden Gerüste beiden Tabellen zu erstellen:

  

$ Schienen g Gerüst Bier Name

     

$ Schienen g Gerüst Entwickler Name beer_id: integer

Das Gerüst Befehl erstellt die Controller und Ansichten für jedes Modell.

Wir müssen unsere Controller modifizieren und sieht ein wenig das Dropdown-Menü bekommen ein Bier für jeden Entwickler wählen:

app / views / Entwickler / _form.html.erb

Ersetzen des erzeugten text_field und Label für beer_id mit dem folgenden:

  <div class="field">
    <%= f.label :beer_id %><br />
    <%= collection_select(:developer, :beer_id, @beers, :id, :name, {:prompt => false}) %> 
  </div>

app / controllers / developer_controller.rb

Bearbeiten des Controllers neu und bearbeiten Methoden:

  # GET /developers/new
  def new
    @developer = Developer.new
    @beers = Beer.all
    respond_to do |format|
      format.html # new.html.erb
    end
  end


  # GET /developers/1/edit
  def edit
    @beers = Beer.all
    respond_to do |format|
      format.html # new.html.erb
    end    
  end

Screen Shots

eingeben Bild Beschreibung hier

eingeben Bild Beschreibung hier

eingeben Bild Beschreibung hier

Notizen

Rails Gerüst ist groß. Schauen Sie sich alle Dateien, die es für Sie erstellt:

$ be rails g scaffold beer name
      invoke  active_record
      create    db/migrate/20140912144218_create_beers.rb
      create    app/models/beer.rb
      invoke    rspec
      create      spec/models/beer_spec.rb
      invoke      factory_girl
      create        spec/factories/beers.rb
      invoke  resource_route
       route    resources :beers
      invoke  scaffold_controller
      create    app/controllers/beers_controller.rb
      invoke    erb
      create      app/views/beers
      create      app/views/beers/index.html.erb
      create      app/views/beers/edit.html.erb
      create      app/views/beers/show.html.erb
      create      app/views/beers/new.html.erb
      create      app/views/beers/_form.html.erb
      invoke    rspec
      create      spec/controllers/beers_controller_spec.rb
      create      spec/views/beers/edit.html.erb_spec.rb
      create      spec/views/beers/index.html.erb_spec.rb
      create      spec/views/beers/new.html.erb_spec.rb
      create      spec/views/beers/show.html.erb_spec.rb
      create      spec/routing/beers_routing_spec.rb
      invoke      rspec
      create        spec/requests/beers_spec.rb
      invoke    helper
      create      app/helpers/beers_helper.rb
      invoke      rspec
      create        spec/helpers/beers_helper_spec.rb
      invoke    jbuilder
      create      app/views/beers/index.json.jbuilder
      create      app/views/beers/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/beers.js.coffee
      invoke    scss
      create      app/assets/stylesheets/beers.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

Alles, was Sie tun müssen, ist zu wissen, welche Dateien zu ändern, wenn Sie wollen mehr als grundlegende CRUD-Operationen.

Ich hoffe, das hilft. ~ Lex

Scaffolds sind Gerüste. Wenn Sie etwas anderes als ein CRUD auf einem Tisch wollen (was ein Gerüst ist / tut), müssen Sie den erzeugten Code Gerüst ändern, oder Ihre eigene Rolle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top