如何避免Rails脚手架将模型放入命名空间

Ale*_*rov 29 ruby-on-rails scaffolding ruby-on-rails-3

Rails 3 scaffold生成器在命名空间内放置模型类.例:

rails generate scaffold admin/portfolio
Run Code Online (Sandbox Code Playgroud)

但我希望只将控制器和视图放在admin命名空间中.

我怎么能避免这种情况?

此致,Alexey Zakharov.

Boo*_*age 34

Rails 4发电机有点不同.如果您使用scaffold_controller生成器,它将预构建所有视图文件,但默认情况下,它将查找名为Admin :: Portfolio的模型.要加载正确的模型,只需将模型名称作为参数传递给生成器.

$ 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
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个命名空间控制器和引用非命名空间模型的视图.


Jed*_*der 23

rails generate model Portfolio

rails generate controller Admin::Portfolios

  • 在某些时候我们都必须写一些代码:P (28认同)

tyb*_*103 7

@RubyDev建议Ryan Bate的Nifty Generators是正确的,但我不知道为什么他说要使用--skip-model选项.

Nifty Generators实际上会完全满足您的要求.只需将其添加到您的Gemfile:

gem "nifty-generators"
Run Code Online (Sandbox Code Playgroud)

并运行:

rails g nifty:scaffold Admin::Portfolio name:string
Run Code Online (Sandbox Code Playgroud)

这将创建一个正常的脚手架与"admin"命名空间中的控制器和视图的一切,但模型不在命名空间中.


Cha*_*ant 5

根据@ tybro0103更新

使用nifty:generators:https://github.com/ryanb/nifty-generators

rails generate nifty:scaffold Admin::Portfolio
Run Code Online (Sandbox Code Playgroud)

如果您已经生成了没有命名空间的模型或脚手架,并希望再次为admin命名空间执行此操作,则可以跳过模型:

rails generate nifty:scaffold Admin::Portfolio --skip-model
Run Code Online (Sandbox Code Playgroud)

如果您希望scaffold生成包含所有字段的视图,请再次输入字段名称,例如:

rails generate nifty:scaffold portfolio name:string
rails generate nifty:scaffold Admin::portfolio  name:string --skip-model
Run Code Online (Sandbox Code Playgroud)

我通常一起做这两个,所以很容易只需要转到上一个命令并编辑它以添加Admin ::&--skip-model.