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

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

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

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

解決済

🔰共通レイアウトの部分テンプレートを正しく表示させたい。

paopao_1111
paopao_1111

総合スコア4

Ruby on Rails 5

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

1回答

0リアクション

0クリップ

184閲覧

投稿2022/07/24 00:12

編集2022/07/24 00:34

前提

以下の点で悩んでおります。(当方rails初心者です)
読んだ本の感想を投稿するサイトを練習中
共通レイアウトの部分テンプレートを作成中です。
変数の部分でうまくメソッドを実行できず、悩んでいます。
共通レイアウトにする前は、正常に表示できておりました。
のちにbootstrapにてレイアウトを整えます。
正常に表示させるレシーバの定義など教えていただけると幸いです。
よろしくお願いいたします。

実現したいこと

共通レイアウトを正しく表示させたい。

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

NoMethodError in Books#index
undefined method `get_profile_image' for nil:NilClass

Extracted source (around line #3):

<div class = "col-md-3"> <h2>User info</h2> <%= image_tag @book.user.get_profile_image(100,100) %> <table class = "table"> <tbody> <tr></tr>

該当のソースコード

【HTML】

<div class = "col-md-3"> <h2>User info</h2> <%= image_tag @book.user.get_profile_image(100,100) %> <table class = "table"> <tbody> <tr></tr> <tr> <th>name</th> <th><%= @book.user.name %></th> </tr> <tr> <th>introduction</th> <th><%= @user.introduction %></th> </tr> </tbody> </table> <div class = "row"> <%= link_to edit_user_path(@user) do %> <p>User Edit</p> <% end %> </div> <h2 class ="mt-3">New book</h2>

<%= form_with model: @book, url: '/books', method: :post do |f| %>

<p>Title</p> <%= f.text_field :title %> <p>Body</p> <%= f.text_area :body %>

<br><%= f.submit 'Create Book' %>
<% end %>

</div>

【Bookコントローラ】
class BooksController < ApplicationController
def index
@book = Book.new
@books = Book.all
end

def create
@book = Book.new(book_params)
@book.user_id = current_user.id
@book.save
redirect_to book_path(@book.id)
end

def show
@book = Book.find(params[:id])
end

def edit
@book = Book.find(params[:id])
end

def destroy
book = Book.find(params[:id])
book.destroy
redirect_to '/books'
end

def update
book = Book.find(params[:id])
book.update(book_params)
redirect_to book_path(book.id)
end

private

def book_params
params.require(:book).permit(:title, :body)
end

end

【Userコントローラ】
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@books = @user.books
end

def edit
@user = User.find(params[:id])
end

def update
@user = User.find(params[:id])
@user.update(user_params)
redirect_to user_path(@user.id)
end

private

def user_params
params.require(:user).permit(:name, :profile_image, :introduction)
end

end

試したこと

コントローラ内で bookの定義を数パターン
ネットでの検索

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

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 5

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