Pregunta

No estoy seguro si estoy leyendo este a la derecha, pero parece que el Andamio no va a hacer una relación de uno a muchos relación en su totalidad.Por ejemplo, si creo messages con andamio y, a continuación, quiero comments en los messages (uno message -> muchas comments), Tengo que ir a través y cambiar todo.Por ejemplo, tengo que cambiar esto en el comment's new ver

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

a este

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

y, a continuación, cambiar la Acción para establecer la @message var...entre otras cosas.

Esto actualmente no se puede hacer automáticamente con Andamio, ¿verdad?

¿Fue útil?

Solución

Esto es cierto, pero, no es el fin de la historia.Hay al menos dos alternativas para Andamio que ambos trabajan muy bien y automáticamente recoger en las relaciones entre las clases (basado en su ActiveRecord relación de indicadores como has_many).Una de estas alternativas es Racionalización de y la otra es ActiveScaffold.

Son útiles principalmente para entrar en los datos que su sistema requiere que no es usuario de los datos de entrada.Por ejemplo, yo los uso para tareas administrativas en las mesas donde no hay ningún punto en la construcción de una completa interfaz de usuario para el CRUD cuando uno de los andamios alternativas va a hacer el trabajo igual de bien para una rara característica.Usted no quiere hacer uso de ellos para comentarios sobre los mensajes de pesar.

Otros consejos

Sí Scaffold funciona para un modelo y controlador relacionado. No cuida ni trabaja con las relaciones.

El objetivo principal de Scaffold es hacer que CRUD funcione en un modelo usando un controlador y vistas relacionadas. Eso es todo. Cualquier otro requisito, como las relaciones, debe codificarse manualmente.

Tenga en cuenta que hay proyectos como Hobo para Rails que le permiten mantener sus campos y asociaciones dentro del modelo mismo . No se pueden andamiar asociaciones, pero está bastante cerca.

Terminas pagando por este azúcar al tener mucha más aplicación desarrollada a tus espaldas. En lugar de rodar el suyo, generalmente resta lo que necesita de un gran banco de comportamientos preconstruidos.

Usted no necesita un pesado rieles de administración de marco para conseguir uno-a-muchos de las relaciones de trabajo.

Usted puede utilizar el andamiaje para obtener la mayor parte del camino.

Un poco más de trabajo en el controlador y _form ver conseguirá que el resto del camino.

He aquí cómo...

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>

Suponiendo que tenemos una cervezas tabla:

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

Y un los desarrolladores tabla que tiene una clave externa (beer_id) hacer referencia a las cervezas tabla:

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

Podemos utilizar el andamiaje para crear dos tablas:

$ rails g andamio de la cerveza de nombre

$ rails g andamio nombre de desarrollador beer_id:integer

El andamio comando crea los controladores y las vistas de cada modelo.

Vamos a necesitar modificar nuestros controladores y las vistas un poco para obtener el menú desplegable para seleccionar una cerveza para cada desarrollador:

app/views/desarrolladores/_form.html.erb

Reemplace el generado text_field y la etiqueta de la beer_id con lo siguiente:

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

app/controllers/developer_controller.rb

Editar el controlador de nuevo y métodos de edición:

  # 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

Capturas De Pantalla

enter image description here

enter image description here

enter image description here

Notas

Rieles de andamios es grande.Buscar en todos los archivos que crea para usted:

$ 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

Todo lo que tienes que hacer es saber que archivos modificar cuando se desee más que la base de operaciones CRUD.

Espero que ayude.~ Lex

Los andamios son andamios. Cuando desee algo más que un CRUD en una mesa (que es lo que es / hace un andamio), debe alterar el código de andamio generado o rodar el suyo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top