前提・実現したいこと
railsでちょっとしたブログサイトを作っています。
また、ログイン機能などはdeviseを用いて作っています。
モデルはUser(ユーザー情報)とBook(記事投稿の情報)の2つです。
今回は複数のページに新規投稿画面を搭載しようとしています。
そして投稿が規定の文字数を超えた時などのエラー時にはrender先としてその時のviewファイルを指定するのが目的です。
発生している問題・エラーメッセージ
複数のページに一つのcreateアクションを設定しているのですが、投稿の際のエラー時のrender先をその時のそれぞれのviewファイルに設定する方法が分かりません。
また、createアクション内でrender 'show'(投稿の際にえらーが起きた時)と記載したとします。showファイルでは新規投稿フォームとそのユーザーが投稿した情報の一覧が記載されています。その場合createアクション内に@user = User.find(params[:id])のように記載してユーザーのidを見つけてこないといけないのですがそうするとcreateアクションのurlにはid情報はないのでエラーになります。
該当のソースコード
html
1<div class="col-xs-3"> 2 <section class="users-info"> 3 <h2>User info</h2> 4 <%= attachment_image_tag @user, :profile_image, format:'jpeg',fallback:"no_image.jpg",size:"100x100" %> 5 <table class="table"> 6 <tr> 7 <td><strong>name</strong></td> 8 <td><strong><%= @user.name %></strong></td> 9 </tr> 10 <tr> 11 <td><strong>introduction</strong></td> 12 <td><strong><%= @user.introduction %></strong></td> 13 </tr> 14 </table> 15 <div class="row"> 16 <%= link_to edit_user_path(@user.id) do %> 17 <span class="col-xs-12 edit-icon" href=edit_user_path(@user.id)><i class="fas fa-edit"></i></span> 18 <% end %> 19 </div> 20 </section> 21 <div class="new-book"> 22 <h2>New book</h2> 23 <%= form_for(@book,url: books_path, method: :post) do |f|%> 24 <div class="field row" style="padding-bottom: 10px"> 25 <p class="book-title"><strong>Title</strong></p> 26 <%= f.text_field :title, class:"col-xs-12" %> 27 </div> 28 <div class="field row" style="padding-bottom: 10px"> 29 <p class="book-opinion"><strong>Opinion</strong></p> 30 <%= f.text_area :body, class:"col-xs-12" %> 31 </div> 32 <div class="actions row" style="padding-bottom: 10px"> 33 <%= f.submit "Create Book",class:"col-xs-12 btn btn-primary"%> 34 </div> 35 <% end %> 36 </div> 37 </div>
controller
1class BooksController < ApplicationController 2 def create 3 @user = User.find(params[:id]) 4 @books = @user.books.page(params[:page]).reverse_order 5 @book = Book.new(book_params) 6 if @book.save 7 flash[:notice] = "Book was successfully created." 8 redirect_to book_path(@book.id) 9 else 10 render 'show' 11 end
試したこと
部分テンプレートを用いて新規投稿の部分を一つにまとめようとしていますが、対処としあっているのかいまいち分かっていません。
初心者で分からないことだらけなのでご教授いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。