別ウィンドウを使ったフォームの作成


Ruby on Railsで編集画面で別ウィンドウを開いて編集作業が完了したら、ウィンドウをクローズして元のページをリロードする処理のサンプルです。
管理画面などで、編集を複数のウィンドウで並行して作業をしたい場合などに有効です。

別ウィンドウで開くリンクは次のように作成します。

<%= link_to article_path(@article), '編集', onclick: "window.open('フォームのURL', 'newWindowId1', 'width=400, height=400 menubar=0 toolbar=0 scrollbars=1 resizable=1'") %>

別ウィンドウで開かれたフォームをユーザーが編集、投稿したらController側で次のように処理します。

class ArticlesController < ApplicationController
def update
if @article.update article_params
render :closed_and_reloaded, layout: false
else
render :edit
end
end
private
def article_params
#...
end
end

View側app/views/layouts/closed_and_reloaded.html.erbは次のように記述します。

<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html>
<body>
<script>
window.opener.location.reload();
window.close();
</script>
</body>
</html>

🐹 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)