references rails example ruby-on-rails ruby-on-rails-3 scaffolding

ruby on rails - example - Cómo evitar que el andamio Rails coloque el modelo en el espacio de nombres



rails scaffold references (8)

El generador de andamios Rails 3 coloca clases de modelos dentro del espacio de nombres. Ejemplo:

rails generate scaffold admin/portfolio

Pero quiero que solo los controladores y las vistas se coloquen dentro del espacio de nombres de administrador.

¿Cómo puedo evitar eso?

Saludos, Alexey Zakharov.


@RubyDev acertó al sugerir los generadores Nifty de Ryan Bate, pero no sé por qué dijo que usara la opción --skip-model.

Nifty Generators realmente hará exactamente lo que estás pidiendo. Simplemente agrégalo a tu Gemfile:

gem "nifty-generators"

y correr:

rails g nifty:scaffold Admin::Portfolio name:string

Esto creará todo lo que un andamio normal crearía con los controladores y las vistas en un espacio de nombres ''admin'', pero el modelo no estará en el espacio de nombres.


Actualizado según @ tybro0103

Use nifty: generators: https://github.com/ryanb/nifty-generators

rails generate nifty:scaffold Admin::Portfolio

Si ya ha generado el modelo o el andamio sin espacio de nombres y desea hacerlo nuevamente para el espacio de nombres de administrador, puede omitir el modelo:

rails generate nifty:scaffold Admin::Portfolio --skip-model

Si desea que el andamio genere vistas con todos los campos, vuelva a colocar los nombres de los campos, por ejemplo:

rails generate nifty:scaffold portfolio name:string rails generate nifty:scaffold Admin::portfolio name:string --skip-model

Normalmente hago los dos juntos, así que es fácil ir al comando anterior y editarlo para agregar Admin :: & --skip-model.


La mejor solucion

rails g scaffold_controller admin/portfolio --model-name=Portfolio

Entonces no genera un prefijo en las tablas.


Los generadores de rieles 4 son un poco diferentes. Si usas el generador scaffold_controller, precompilará todos los archivos de vista, pero por defecto buscará un modelo llamado Admin :: Portfolio. Para cargar el modelo correcto, simplemente pase el nombre del modelo como un argumento al generador.

$ rails g model Portfolio invoke active_record create db/migrate/20150822164921_create_portfolios.rb create app/models/portfolio.rb invoke test_unit create test/models/portfolio_test.rb create test/fixtures/portfolios.yml $ rails g scaffold_controller Admin::Portfolio --model-name=Portfolio create app/controllers/admin/portfolios_controller.rb invoke haml create app/views/admin/portfolios create app/views/admin/portfolios/index.html.haml create app/views/admin/portfolios/edit.html.haml create app/views/admin/portfolios/show.html.haml create app/views/admin/portfolios/new.html.haml create app/views/admin/portfolios/_form.html.haml invoke test_unit create test/controllers/admin/portfolios_controller_test.rb invoke helper create app/helpers/admin/portfolios_helper.rb invoke test_unit invoke jbuilder create app/views/admin/portfolios create app/views/admin/portfolios/index.json.jbuilder create app/views/admin/portfolios/show.json.jbuilder

Esto le dará un controlador con espacio de nombre y vistas que hacen referencia al modelo sin espacio de nombre.


Los generosos generosos eran lo correcto hace algún tiempo, pero ahora cuando se lanzó Rails 4 se desactualizó. Si desea generar andamios de administración con un modelo sin espacio de nombre, puede usar la gema rails-admin-scaffold .


Puede hacerlo ahora en Rails (o al menos en 5.1) usando el siguiente comando:

rails generate scaffold admin/theme name:string active:integer position:integer --migration=false rails generate migration CreateTheme name:string active:integer position:integer # add t.timestamps in migration

Al especificar --model-name Rails no intenta automáticamente adivinar el nombre del modelo.


Puedes simplemente crear tus propios generadores y hacer lo que quieras con ellos:

En los carriles 4:

#config/application.rb config.generators do |g| g.scaffold_controller :my_controller end

y

#lib/generators/rails/my_controller/my_controller_generator.rb class Rails::MyControllerGenerator < Rails::Generators::ScaffoldControllerGenerator def class_name ([file_name]).map!{ |m| m.camelize }.join(''::'') end def table_name @table_name ||= begin base = pluralize_table_names? ? plural_name : singular_name ([base]).join(''_'') end end end

Se eliminará el espacio de nombre del modelo.

Tenga en cuenta que si está generando un controlador de andamios por sí solo, deberá llamar explícitamente a su generador personalizado: rails g my_controller ''account/users''

Desafortunadamente esto solo maneja el controlador. Todavía estoy buscando una solución de vista.


rails generate model Portfolio

rails generate controller Admin::Portfolios