web-dev-qa-db-ja.com

モデルを名前空間に配置するためのRails足場)を回避する方法

Rails 3スキャフォールドジェネレーターは、モデルクラスを名前空間内に配置します。例:

Rails generate scaffold admin/portfolio

ただし、コントローラーとビューのみをadmin名前空間内に配置する必要があります。

どうすればそれを回避できますか?

30
Alexey Zakharov

Rails generate model Portfolio

Rails generate controller Admin::Portfolios

23
Jed Schneider

Rails4ジェネレーターは少し異なります。 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

これにより、名前空間のあるコントローラーと、名前空間のないモデルを参照するビューが提供されます。

34
BoosterStage

@RubyDevはRyanBateの Nifty Generators を提案するのは正しかったが、彼が--skip-modelオプションを使用すると言った理由はわかりません。

Nifty Generatorsは、実際に正確にあなたが求めていることを実行します。 Gemfileに追加するだけです。

gem "nifty-generators"

実行します:

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

これにより、通常のスキャフォールドが「admin」名前空間のコントローラーとビューで作成するすべてのものが作成されますが、モデルnotは名前空間に作成されます。

7
tybro0103

@ tybro0103に従って更新

Nifty:generatorsを使用します: https://github.com/ryanb/nifty-generators

Rails generate nifty:scaffold Admin::Portfolio

名前空間なしでモデルまたはスキャフォールドをすでに生成していて、admin名前空間に対して再度生成したい場合は、モデルをスキップできます。

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

スキャフォールドですべてのフィールドを含むビューを生成する場合は、フィールド名をもう一度入力してください。例:

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

私は通常2つを一緒に行うので、前のコマンドに移動して編集し、Admin ::&-skip-modelを追加するのは簡単です。

5
Chandresh Pant

次のコマンドを使用して、Rails(または少なくとも5.1)でこれを実行できます。

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

--model-name Railsを指定しても、モデル名は自動的に推測されません。

1
Ali Haris

気の利いたジェネレーターは以前は正しいものでしたが、Rails 4がリリースされると、古くなりました。名前空間のないモデルで管理スキャフォールディングを生成する場合は、 Rails- admin-scaffold gem。

1
dhampik

かなり簡単に独自のジェネレーターを作成し、それらを使って好きなことを行うことができます。

In Rails 4:

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

そして

#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

モデルの名前空間を削除します。

独自にscaffold_controllerを生成する場合は、カスタムジェネレーターを明示的に呼び出す必要があることに注意してください。Rails g my_controller 'account/users'

残念ながら、これはコントローラーのみを処理します。私はまだビューソリューションを探しています。

1
Paul Odeon

最良の解決策

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

したがって、テーブルにプレフィックスは生成されません

0
gilcierweb