- 更新日: 2014年2月19日
- Rails
Vim で Rails ビュー作成時に、選択範囲をパーシャルに一発で切り出して保存
Rails でビューを作成していると、あーこの部分はパーシャル(partial: 部分テンプレート)に切り出したいな〜と思うことがよくあります。そんな時に用いている Vim の小技です。
最初に、Vim の以下のコマンドで、編集中のファイルのあるディレクトリへと移動しておきます。
1 2 3 |
:cd %:h |
また、Vim-users.jp – Hack #69: 簡単にカレントディレクトリを変更する の設定を .vimrc に書いておくと、Space cd で移動できるので楽です。
1 2 3 |
<Space>cd |
ここでは、app/views/posts/index.html.erb を編集中と仮定します。ちなみに私は Netrw を Vim のファイラとして使っています。
パーシャルを切り出す Vim 操作
例えば、モデルのコレクション(ここでは@posts)において、app/views/posts/index.html.erb から、app/views/posts/_post.html.erb へとパーシャルなテンプレートを切り出したい場合。
app/views/posts/index.html.erb
1 2 3 |
<% @posts.each do |post| %> <%= post.content %> <% end %> |
↑これを、こうする↓
app/views/posts/index.html.erb
1 |
<%= render @posts %> |
app/views/posts/_post.html.erb
1 |
<%= post.content %> |
まず最初の状態、以下のファイルにおいて…
app/views/posts/index.html.erb
1 2 3 |
<% @posts.each do |post| %> <%= post.content %> <% end %> |
1. :cd %:h で編集中ファイルのディレクトリ(**/posts/)へ移動。
2. 2行目 <%= post.content %> をビジュアルモードで選択。
3. 選択した状態で : を押し、コマンドラインモードに :’<,'> が表示される。
4. :’<,'> に続けて w _post.html.erb と入力して return。(:’<,'>w _post.html.erb)
これで、_post.html.erb ができあがります。
app/views/posts/_post.html.erb
1 |
<%= post.content %> |
後は app/views/posts/index.html.erb を以下のように編集。
app/views/posts/index.html.erb
1 |
<%= render @posts %> |
パーシャルのファイル名を指定する場合は以下。
app/views/posts/index.html.erb
1 |
<%= render 'post', collection: @posts %> |
先頭の _(アンダースコア)と拡張子を外してパーシャルのファイル名を指定。また :collection パラメータで渡すと、パーシャル(部分テンプレート)を繰り返し表示します。
ActiveModel を利用していないコレクションの場合
ActiveRecord, ActiveModel を利用していないコレクションの場合、上述のパーシャル切り出しの方法ではエラーになりました。以下のように、app/views/posts/index.html.erb を以下のように編集して、パーシャルのファイル名とコレクションのオブジェクトを指定する。
app/views/posts/index.html.erb
1 |
<%= render 'post', posts: @posts %> |
パーシャル側は以下。
app/views/posts/_post.html.erb
1 2 3 |
<% posts.each do |post| %> <%= post.content %> <% end %> |
以上です。
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!