rails tutorialの13章にて,
microposts_contoroller.rbのcreateについてなのですが,POSTされたマイクロポストが条件分岐で@micropost.saveに成立した場合,redirect_to root_urlでメインページにリダイレクトされます.条件を満たさない(フォームを空白で送信した)場合は,render 'static_pages/home'でメインページに飛ばされエラー表示がされます.
どちらも同じページに飛ぶなら,どちらもredirect_to root_urlでいいのでは?と思い,そうしてみたらこの場合だとエラーの表示が出ません.
render 'static_pages/home'のままだとエラー表示がちゃんと出ます.
この原因は何故なのでしょうか…
###間違っているコード
microposts_contoroller.rb
def create @micropost = current_user.microposts.build(micropost_params) if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url else @feed_items = current_user.feed.paginate(page: params[:page]) redirect_to root_url end end
###正しいコード
microposts_contoroller.rb
def create @micropost = current_user.microposts.build(micropost_params) if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url else @feed_items = current_user.feed.paginate(page: params[:page]) render 'static_pages/home' end end
###他ファイル
_error_messages.html
<% if object.errors.any? %> <div id="error_explanation"> <div class="alert alert-danger"> The form contains <%= pluralize(object.errors.count, "error") %>. </div> <ul> <% object.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %>
home.html.rb
<% if logged_in? %> <div class="row"> <aside class="col-md-4"> <section class="user_info"> <%= render 'shared/user_info' %> </section> <section class="micropost_form"> <%= render 'shared/micropost_form' %> </section> </aside> <div class="col-md-8"> <h3>Micropost Feed</h3> <%= render 'shared/feed' %> </div> </div> <% else %> <div class="center jumbotron"> <h1>Welcome to the Sample App</h1> <h2> This is the home page for the <a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a> sample application. </h2> <%= link_to "Sign up now!", signup_path, class: "btn btn-lg btn-primary" %> </div> <%= link_to image_tag("rails.svg", alt: "Rails logo", width: "200px"), "https://rubyonrails.org/" %> <% end %>
_micropost_form.html
<%= form_with(model: @micropost, local: true) do |f| %> <%= render 'shared/error_messages', object: f.object %> <div class="field"> <%= f.text_area :content, placeholder: "Compose new micropost..." %> </div> <%= f.submit "Post", class: "btn btn-primary" %> <% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/12 09:42