現在、記事のプレビュー機能を実装しようと考えています。
Rails のバージョンは 4.2.6 でデータベースには MySQL 5.5 を使用しています。
##知りたいこと
プレビュー機能の仕様については以下の通りです。
プレビュー機能の仕様
① 記事編集画面でプレビューボタンを押すと別タブで現在入力された内容を表示する
② プレビュー用のURLを発行し、そのURLからほかの人も同じプレビューを閲覧できる
たとえば、プレビュー用のURLは以下のようになります。
オリジナルURL:/posts/12345
プレビューURL:/posts/12345?preview=true
仕様については WordPress と似ているかもしれません。
①の実装方法は既に把握しているので、今回は②の方法について知りたいです。
##データベースの構成
データベースの構成は以下の通りです。
users - id: integer - email: string - name: string posts - id: integer - title: string - content: text - user_id: integer - updated_at: datetime posts_tags - id: integer - tag_id: integer - post_id: integer tags - id: integer - name: string
##考えたこと
プレビュー機能の実装方法について以下のような方法を考えました。
まず、以下のようなプレビュー用テーブルを用意します。
preview_posts - id: integer - post_id: integer - title: string - content: text - user_id: integer - updated_at: datetime preview_posts_tags - id: integer - tag_id: integer - post_id: integer
記事の新規作成ボタンを押すのと同時に空の post
レコードを作成します。
これはプレビュー時に使用する URL (post_id) を作成するためです。
今後、保存時にはこの post_id
のレコードに保存していきます。
また、プレビューボタンが押されたときに、 preview_posts
テーブルにデータを保存し
そのデータをプレビューとして表示します。
もしプレビュー表示の URL にアクセスした場合に、プレビュー用のレコードがなかったり、
posts
テーブルに保存されている更新日時が preview_posts
の更新日時より新しければ、
posts
に保存されている内容をプレビューとして表示します。
この方法の問題点
① 新規作成時に ID を発行するので、無駄に post_id
を消費してしまう。
② 元のテーブルの構成が変更されるたびにプレビュー用のテーブルも変更しなければならない。
記事の新規作成の頻度はそれほど多くないので、①はそこまで問題にならないかもしれません。
記事のテーブル構成は今後頻繁に変更する可能性があり、テーブルの変更だけでなく
Active Record のリレーションなどの設定もしなければならないので、②は特に問題になると思います。
paper_trail などのバージョン管理用の gem を使用し、
プレビュー機能を実装することも検討しましたが、少しオーバースペックかなと思いました。
私が掲示した方法に関係なく、もし良い方法がありましたらご教授いただけると幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/29 06:14
2017/11/29 08:52 編集
2017/11/29 09:16