【问题标题】:Generate scaffold for multiple namespaces using same migration and model on rails 6在 Rails 6 上使用相同的迁移和模型为多个命名空间生成脚手架
【发布时间】:2021-10-17 11:28:51
【问题描述】:

我正在尝试使用脚手架生成多个命名空间,但我想对所有人使用相同的模型和相同的迁移数据库。所以我尝试了这个:

rails g scaffold years title:string slug:string

rails g scaffold admin::years title:string slug:string --skip-model

rails g scaffold api::years title:string slug:string --skip-model --api

然后当我去检查文件时,它生成了所有这些文件:

models/year.rb
models/api/year.rb
models/admin/year.rb 

migrate/_create_years.rb
migrate/_create_admin_years.rb
migrate/_create_api_years.rb

但我希望管理员和 API 的控制器和视图使用相同的模型:

models/year.rb

并且还使用在以下位置生成的同一张表:

migrate/_create_years.rb

实现这一目标的正确脚手架命令是什么?

【问题讨论】:

  • 您正在尝试做的事情超出了脚手架应该实现的范围,并且立即编写代码会更容易。脚手架仅用于对资源的典型 CRUD MVC 进行快速原型设计。
  • 如果你真的必须这样做,例如作为 gem 的一部分,答案是创建你自己的生成器。

标签: ruby-on-rails


【解决方案1】:

scaffold 命令上没有skip-model 选项,所以这就是为什么它不起作用的原因。您可以使用--skip-migration 选项来最小化抑制迁移,但您仍然需要删除模型、测试文件等。

一种更接近您想要的方法是将scaffold 用于您的基本模型,然后将rails generate scaffold_controller 用于其他两个:

% rails g scaffold years title:string slug:string
 <...>

% rails g scaffold_controller admin/year
 <...>

% r g scaffold_controller api/year --api                                         
create  app/controllers/api/years_controller.rb
invoke  jbuilder
invoke  resource_route
  route    namespace :api do
    resources :years
  end
invoke  test_unit
create    test/controllers/api/years_controller_test.rb
invoke  helper
create    app/helpers/api/years_helper.rb
invoke    test_unit
invoke  jbuilder
create    app/views/api/years
create    app/views/api/years/index.json.jbuilder
create    app/views/api/years/show.json.jbuilder
create    app/views/api/years/_api_year.json.jbuilder

【讨论】:

  • 这是一个很好的提示,并在正确的文件夹中创建了文件,但我必须手动编辑控制器和视图才能使其工作。我想知道是否有办法或宝石让这更简单,rsrs。但非常感谢您的回答。
猜你喜欢
  • 2016-04-06
  • 1970-01-01
  • 2019-03-26
  • 2013-11-24
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多