機能の概要説明
現在、疑似ツイッターアプリを作成しています。
http://〇〇/tweets/new
ページは、テキストボックスに文章を入力し、ツイートボタン押下で投稿します。
http://〇〇/tweets
ページは、ユーザが投稿したツイート一覧が表示されます。
http://〇〇/tweets/new
でツイートボタンを押下した後、http://〇〇/tweets
へ画面遷移し、投稿した文章が反映されます。
パーシャルのコード
http://〇〇/tweets/new
とhttp://〇〇/tweets
のヘッダーは、大部分が同じであるため、パーシャルを用いて共通化しようと試みました。
しかし、一部分のみ差異があるため、その部分はURLによって表示するか否かを振り分けることにしました。
具体的には、下記のように分けています。
html
1<!-- ファイル名は _header.html.erb --> 2<% if (request.path_info == tweets_path) %> 3 <!-- http://〇〇/tweets ページのみ表示するHTML --> 4<% end %>
バリデーションの仕様
http://〇〇/tweets/new
ページで、ユーザがテキストボックスに値を入力し、ツイートボタンを押下した際、
入力された内容が不適切(何も入力されていない/140文字より多い)だった場合、バリデーションエラーを発生させます。
Ruby
1class TweetsController < ApplicationController 2 def create 3 @tweets = Tweet.new(tweets_params) 4 if @tweets.save 5 redirect_to tweets_path 6 else 7 render 'new' 8 end 9 end 10end
問題点/質問
ここで、実際にバリデーションエラーが発生した場合、
URLはhttp://〇〇/tweets
で、表示される内容はhttp://〇〇/tweets/new
となります。
すると、パーシャルのURLによって振り分けている条件で、
「見かけ上はhttp://〇〇/tweets/new
なのにhttp://〇〇/tweets
のヘッダーが表示される」
という状況に陥っており、こちらの対処で詰まってしまいました。
現状、私が考えている代替案として、
0. パーシャル内には、完全に共通化しているコードのみ記述するようにする
0. バリデーションエラーを発生させず、JavaScriptを使用して前段階で弾く
といったことを考えていますが、実際このように対処するしかないのでしょうか?
「バリデーションエラーが発生した場合であっても、一つのパーシャルでレイアウトを振り分ける方法」
ズバリこのような方法があれば、ご教示いただきたく存じます
(また、そもそも機能や仕様について改善点がある場合もご指摘ください)。
以上、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/03 03:57