0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rails 複数のviewに新規投稿フォーム render先がそれぞれのview

Posted at

前提・実現したいこと

railsでちょっとしたブログサイトを作っています。
また、ログイン機能などはdeviseを用いて作っています。
モデルはUser(ユーザー情報)とBook(記事投稿の情報)の2つです。
今回は複数のページに新規投稿画面を搭載しようとしています。
そして投稿が規定の文字数を超えた時などのエラー時にはrender先としてその時のviewファイルを指定するのが目的です。

発生している問題・エラーメッセージ

複数のページに一つのcreateアクションを設定しているのですが、投稿の際のエラー時のrender先をその時のそれぞれのviewファイルに設定する方法が分かりません。
また、createアクション内でrender 'show'(投稿の際にえらーが起きた時)と記載したとします。showファイルでは新規投稿フォームとそのユーザーが投稿した情報の一覧が記載されています。その場合createアクション内に@user = User.find(params[:id])のように記載してユーザーのidを見つけてこないといけないのですがそうするとcreateアクションのurlにはid情報はないのでエラーになります。

該当のソースコード

<div class="col-xs-3">
			<section class="users-info">
				<h2>User info</h2>
					<%= attachment_image_tag @user, :profile_image, format:'jpeg',fallback:"no_image.jpg",size:"100x100" %>
						<table class="table">
							<tr>
								<td><strong>name</strong></td>
								<td><strong><%= @user.name %></strong></td>
							</tr>
							<tr>
								<td><strong>introduction</strong></td>
								<td><strong><%= @user.introduction %></strong></td>
							</tr>
						</table>
						<div class="row">
							<%= link_to edit_user_path(@user.id) do %>
								<span class="col-xs-12 edit-icon" href=edit_user_path(@user.id)><i class="fas fa-edit"></i></span>
							<% end %>
						</div>
			</section>
			<div class="new-book">
				<h2>New book</h2>
				<%= form_for(@book,url: books_path, method: :post) do |f|%>
				<div class="field row" style="padding-bottom: 10px">
					<p class="book-title"><strong>Title</strong></p>
							<%= f.text_field :title, class:"col-xs-12" %>
				</div>
				<div class="field row" style="padding-bottom: 10px">
					<p class="book-opinion"><strong>Opinion</strong></p>
					<%= f.text_area :body, class:"col-xs-12" %>
				</div>
				<div class="actions row" style="padding-bottom: 10px">
						<%= f.submit "Create Book",class:"col-xs-12 btn btn-primary"%>
				</div>
				<% end %>
			</div>
		</div>
class BooksController < ApplicationController
  def create
  	@user = User.find(params[:id])
  	@books = @user.books.page(params[:page]).reverse_order
  	@book = Book.new(book_params)
  	if @book.save
  		flash[:notice] = "Book was successfully created."
  	   redirect_to book_path(@book.id)
  	else
  		render 'show'
  	end

試したこと

部分テンプレートを用いて新規投稿の部分を一つにまとめようとしていますが、対処としあっているのかいまいち分かっていません。
初心者で分からないことだらけなのでご教授いただけると幸いです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?