如何创建具有不同控制器和型号名称的脚手架?

时间:2014-08-24 16:38:08

标签: ruby-on-rails ruby-on-rails-4

我正在使用rails中的版本化JSON API,其中控制器也响应HTML,这意味着它可以作为浏览器或通过我正在开发的应用程序进行访问。控制器的形式为Model :: V1 :: UsersController(Model而不是API,因为它们不仅仅响应JSON),我目前在routes.rb中有以下内容:

namespace :model, path: 'm', as: '' do
  # For objects in the model, accessible by JSON (through the app) or HTML (through the browser, using forms to send data to the server).

  scope module: 'v1', constraints: OrConstraint.new([APIConstraint.new(1), APIConstraint.new(:default)]) do
    resources :users do
      collection do
        post :sign_in
      end
    end
  end
end

我计划在我的API中添加更多模型,但是如何使用scaffolding来执行此操作?例如,要创建一个控制器Model :: V1 :: CommentsController,但使用Comment模型,而不是Model :: V1 :: Comments。

我一直试图弄清楚这几个小时,谷歌搜索有类似问题的人表示,在这种情况下,有些人说根本不使用脚手架:我不想这样做,因为它会意思是自己写所有的观点,这将是非常耗时的。除此之外,我找不到多少。在某个地方建议使用漂亮的生成器,但它似乎不再维护了:自2012年以来没有活动。我是rails的新手,可能是我错过了一些非常明显的东西,但令我惊讶的是,没有多少人遇到同样的问题。

我考虑过制作自己的生成器,但是看看https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb的来源,看起来很复杂。

编辑:我刚刚发现我可以将--model-name参数传递给rails scaffold生成器来实现我想要的,但由于某种原因,它仍然试图创建一个与控制器同名的模型。我怎么能改变这个?

1 个答案:

答案 0 :(得分:0)

通过使用脚手架生成器完全不生成模型,我已经解决了这个问题: 创建Model :: V1 :: CommentsController作为控制器,将Comments作为模型:

rails g model comment
rails g scaffold model/v1/comments --model-name=comment --no-orm