質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1150閲覧

【rails】部分テンプレートについて

runban

総合スコア152

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/11/07 14:29

部分テンプレートのhtmlに「ユーザー情報(name・introduction)」と「投稿フォーム」を記入し、「books」コントローラーに対応しているindex.html.erbにて使用したいのですが、ユーザー情報(name・introduction)を上手く反映させる方法が分かりません。
(name・introductionはUserモデルのカラムとして登録しています)

現状作成している下記部分テンプレートに対して、どのように記入すればnameとintroductionが反映させることができますでしょうか。(下記templateのhtmlにて該当箇所に矢印を当てています)
ご教示のほど、何卒よろしくお願いいたします。
(説明させていただいた内容にて不明な箇所がございましたら、ご質問頂けますと幸いです)

templatehtml

1<table> 2 <tr> 3 <td><%= book.user.name %></td> 4 </tr> 5 <tr> 6 <td>name</td> 7 <td><%= %></td> 8 ↑こちらです 9 </tr> 10 <tr> 11 <td>introduction</td> 12 <td><%= %></td> 13       ↑こちらです 14 </tr> 15</table> 16 17 18<h1>New book</h1> 19<%= form_with model: book, local: true do |f| %> 20 <h4>Title</h4> 21 <%= f.text_field :title %> 22 <h4>Opinion</h4> 23 <%= f.text_area :body %> 24 <%= f.submit 'Create Book' %> 25<% end %>

indexhtml

1<%= render 'layouts/list', book: Book.new %> 2 3<h1>Books</h1> 4<table> 5 <thead> 6 <tr> 7 <th>Title</th> 8 <th>Opinion</th> 9 </tr> 10 </thead> 11 <tbody> 12 <% @books.each do |book| %> 13 <tr> 14 <td><%= image_tag('sample-author1.jpg') %></td> 15 <td> 16 <%= link_to book_path(book) do %> 17 <%= book.title %> 18 <% end %> 19 </td> 20 <td><%= book.body %></td> 21 </tr> 22 <% end %> 23 </tbody> 24</table> 25

bookscontroller

1class BooksController < ApplicationController 2 3 def index 4 @book = Book.new 5 @books = Book.all 6 end 7 8 def create 9 @book = Book.new(book_params) 10 @book.user_id = current_user.id 11 @book.save 12 redirect_to books_path 13 end 14 15 def show 16 @book = Book.find(params[:id]) 17 end 18 19 def edit 20 @book = Book.find(params[:id]) 21 render :layout => nil 22 end 23 24 def update 25 @book = Book.find(params[:id]) 26 Book.update(book_params) 27 redirect_to book_path(@book) 28 end 29 30 def destroy 31 @book = Book.find(params[:id]) 32 @book.destroy 33 redirect_to books_path 34 end 35 36 private 37 def book_params 38 params.require(:book).permit(:title, :body) 39 end 40end 41

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/11/07 21:00

そもそも部分テンプレートって`_`から始まらなければならないのでは。 indexからも読んでないようですが、どこから読んでいる想定なのでしょうか。
winterboum

2020/11/07 21:31

Bookの新規登録時にUserのintroductionも登録という事が意味がわかりません。 なぜUserの編集ではないのですか?
runban

2020/11/08 00:26

m.ts10806様 失礼いたしました、部分テンプレートのファイル名は「templatehtml」ではなく「_list.html.erb」で登録しております。 上記は部分テンプレートのhtmlと示すために名前を「templatehtml」にしておりました、、ややこしくしてしまい、申し訳ございませんm(__)m
runban

2020/11/08 00:36

winterborm様 Userの編集にする場合、index.htmlにて記載している <%= render 'layouts/list', book: Book.new %> をどのように変更すればよいかご教示いただけませんでしょうか、 Bookの新しいインスタンスも作成しながら、Userの情報をデータベースから引っ張ってきたいのですが、どのように書けばいいのか分かりません、、
m.ts10806

2020/11/08 01:37

質問は編集できます。
m.ts10806

2020/11/08 01:38

あと、コードブロックの冒頭はあくまで「言語」 なので「HTML」またはテンプレートエンジン名とするのが正しいです。 ファイル名は外に出してください。 例: _list.html.erb ```html
winterboum

2020/11/08 02:11

どの「Userの情報をデータベースから」取りたいのですか?
guest

回答1

0

自己解決

<%= render 'layouts/list', book: @book %>に対して「user: @user」を追加した後、部分テンプレートに「user.name」「user.introduction」と記入すると表示されました。
ご回答いただいた皆様、ありがとうございました。

投稿2020/11/08 06:19

runban

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問