Rails generateコマンドを使用してビューを個別に生成する方法はありますか?存在するタスクを実行するためにgemをインストールすることもできます。基本的にscaffoldingコマンドは私に多くを与え、コントローラーを手動でコーディングしたいのですが、レコードのテーブルを使用してインデックスビューを作成するのはあまり効率的ではありません。
コントローラージェネレーターを使用して、コントローラーとビューを生成できます。
Rails g controller controllername new create
これにより、対応するビューを持つアクションnew
およびcreate
が作成されます。
これを使用して手動でルートを設定する必要があります。
特定の状況の1つは、既存のコントローラーにnewビューを追加する場合です。
その場合は、通常のコマンドを使用しますが、既存のファイルを上書きしないようにプロンプトが表示されるたびに'n'
と言うように注意してください。
たとえば、'invite'
というビューを'projects'
という名前の既存のコントローラーに追加します。
smith@ubuntuSrv16DEV4:~/railsapps/project_manager$ Rails -v
Rails 5.1.4
smith@ubuntuSrv16DEV4:~/railsapps/project_manager$ Rails generate controller projects invite
Running via Spring preloader in process 46253
conflict app/controllers/projects_controller.rb
Overwrite /home/smith/railsapps/project_manager/app/controllers/projects_controller.rb? (enter "h" for help) [Ynaqdh] n
skip app/controllers/projects_controller.rb
route get 'projects/invite'
invoke erb
exist app/views/projects
create app/views/projects/invite.html.erb
invoke test_unit
conflict test/controllers/projects_controller_test.rb
Overwrite /home/smith/railsapps/project_manager/test/controllers/projects_controller_test.rb? (enter "h" for help) [Ynaqdh] n
skip test/controllers/projects_controller_test.rb
invoke helper
identical app/helpers/projects_helper.rb
invoke test_unit
invoke assets
invoke coffee
identical app/assets/javascripts/projects.coffee
invoke scss
conflict app/assets/stylesheets/projects.scss
Overwrite /home/smith/railsapps/project_manager/app/assets/stylesheets/projects.scss? (enter "h" for help) [Ynaqdh] n
skip app/assets/stylesheets/projects.scss
smith@ubuntuSrv16DEV4:~/railsapps/project_manager$
最初の部分はモデル/コントローラーの名前、2番目の部分はアクションです。
同じ人が以前に述べたように、ビューを生成する方法を示す投稿がありました。非常に便利なRailsデフォルトテンプレートを使用して、モデルのすべてのビューを作成します。
私のように、もう少しカスタマイズ可能なものが必要な場合は、以下を達成できます。
独自のジェネレータを作成して、このようなものを作成できます。
RailsはビューNAME VIEW [オプション]を生成します
これを実現するには、次のことを行う必要があります。
Rails generate generator view
これにより、lib/generators/view /フォルダーにいくつかのファイルが生成されます。
View_generator.rbファイルを開き、次のコードを追加します。
class ViewGenerator < Rails::Generators::Base
source_root File.expand_path('templates', __dir__)
argument :name, type: :string
argument :action, type: :string
def generate_view
template "#{file_name}.html.erb", "app/views/#{folder_name}/#{file_name}.html.erb"
end
private
def folder_name
name.underscore
end
def file_name
action.underscore
end
def type
name.titleize.singularize
end
def down_type
name.downcase.singularize
end
def render_form
"<%= render 'form', #{down_type}: @#{down_type} %>"
end
def render_link_back
"<%= link_to 'Back', #{folder_name}_path %>"
end
end</pre>
次に、generate_viewメソッドで使用される実際のテンプレートを使用しているファイルを作成する必要があります。
例としてnewアクションを使用して、filelib/generators/view/new.html.erbを作成し、次を追加します。
<h1>New <%= type %></h1>
<%= render_form %>
<%= render_link_back %>
テンプレートビューを必要なだけカスタマイズします。 _form.html.erbも追加する必要があります。 view_generator.rbファイルに追加の変数とロジックを追加すれば完了です。
それはより多くの作業ですが、常に同じようなビューを生成していることに気付いた場合は価値があります。
このアプローチの最良の使用例は、プラットフォームにホワイトラベルを付け、クライアントプロファイル用に複数のファイルを生成する必要がある場合です。