Rails 3スキャフォールドジェネレーターは、モデルクラスを名前空間内に配置します。例:
Rails generate scaffold admin/portfolio
ただし、コントローラーとビューのみをadmin名前空間内に配置する必要があります。
どうすればそれを回避できますか?
Rails generate model Portfolio
Rails generate controller Admin::Portfolios
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
これにより、名前空間のあるコントローラーと、名前空間のないモデルを参照するビューが提供されます。
@RubyDevはRyanBateの Nifty Generators を提案するのは正しかったが、彼が--skip-modelオプションを使用すると言った理由はわかりません。
Nifty Generatorsは、実際に正確にあなたが求めていることを実行します。 Gemfileに追加するだけです。
gem "nifty-generators"
実行します:
Rails g nifty:scaffold Admin::Portfolio name:string
これにより、通常のスキャフォールドが「admin」名前空間のコントローラーとビューで作成するすべてのものが作成されますが、モデルnotは名前空間に作成されます。
@ 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を追加するのは簡単です。
次のコマンドを使用して、Rails(または少なくとも5.1)でこれを実行できます。
Rails g scaffold_controller admin/portfolio --model-name=Portfolio
--model-name Railsを指定しても、モデル名は自動的に推測されません。
気の利いたジェネレーターは以前は正しいものでしたが、Rails 4がリリースされると、古くなりました。名前空間のないモデルで管理スキャフォールディングを生成する場合は、 Rails- admin-scaffold gem。
かなり簡単に独自のジェネレーターを作成し、それらを使って好きなことを行うことができます。
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'
残念ながら、これはコントローラーのみを処理します。私はまだビューソリューションを探しています。
最良の解決策
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
したがって、テーブルにプレフィックスは生成されません