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