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

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

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

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 6

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

704閲覧

モデルの紐付けを行い選択されたIDから画像を引っ張ってきたい

Engineer_traine

総合スコア17

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 6

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Ruby on Rails

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/07/13 07:42

前提・実現したいこと

現在railsの学習をしており部屋の登録や予約をユーザーが行える機能を実装している最中です。
具体的に今実装したいこととしてgreenhouseモデルとreserverモデルを作成し、greenhouseモデルに部屋をいくつか登録してある状態なのですが、そこで登録してある部屋を選択し予約ページに遷移した時に選択した部屋のイメージ画像を予約ページでも表示したいということです。

行った手順としては
1 greenhouseモデルとreserverモデルを1:1で関係づけた(greenhouseモデルの方にhas_one :reserver, reserverモデルの方に belongs_to :greenhouseの記述済みです)

2 reserversコントローラーのindex,newに@greenhouse = Greenhouse.all,.newをそれぞれ記述

3 reservers/new.html.erbに

<tr> <td> <%=image_tag @greenhouse.image %> </td> </tr> 記述済みです。 ### 発生している問題・エラーメッセージ
ArgumentError in Reservers#new Can't resolve image into URL: undefined method `persisted?' for nil:NilClass

該当のソースコード

rails

1class ReserversController < ApplicationController 2 def index 3 @reservers = Reserver.all 4 @greenhouse = Greenhouse.all 5 end 6 7 def new 8 @reserver = Reserver.new 9 @greenhouse = Greenhouse.new 10 end 11 12 def create 13 @reserver = Reserver.new(params.require(:reserver).permit(:start, :end, :number, :total, :user_id)) 14 if @reserver.save 15 flash[:notice] = "新規予約をしました" 16 redirect_to action: :index 17 else 18 render :new 19 end 20 end 21 22 def show 23 @reserver = Reserver.find(params[:id]) 24 end 25 26 def edit 27 @reserver = Reserver.find(params[:id]) 28 end 29 30 def update 31 @reserver = Reserver.find(params[:id]) 32 if @reserver.update(params.require(:reserver).permit(:start, :end, :number, :total, :user_id)) 33 flash[:notice] = "投稿を更新しました" 34 redirect_to :reservers 35 else 36 render "edit" 37 end 38 end 39 40 def destroy 41 @reserver = Reserver.find(params[:id]) 42 @reserver.destroy 43 flash[:notice] = "投稿を削除しました" 44 redirect_to :reservers 45 end 46end

rails

1#new.html.erb 2<h3>新規予約</h3> 3   4  <%= render "shared/error", obj: @reserver %> 5 6 <%= form_for @reserver do |f| %> 7 <table> 8 <tr> 9 <td> 10 <%=image_tag @greenhouse.image %> 11 </td> 12 </tr> 13 14 <tr> 15 <th><%= f.label :開始日 %></th> 16 <td><%= f.date_field :start, class:"start-content" %></td> 17 </tr> 18 19 <tr> 20 <th><%= f.label :終了日 %></th> 21 <td><%= f.date_field :end, class:"end-content" %></td> 22 </tr> 23 24 <tr> 25 <th><%= f.label :人数 %></th> 26 <td><%= f.number_field :number, class:"number-content" %></td> 27 </tr> 28 </table> 29 <div> 30 <ul> 31 <li><%= f.submit "予約を完了する" %></li> 32 </ul> 33 </div> 34 <% end %> 35   36 <div> 37 <ul> 38 <li><%= link_to "予約一覧に戻る", :reservers %></li> 39 </ul> 40 </div>

試したこと

image_tagの記述をなくした所入力のフォームの箇所に#ActiveStorage::Attached::One:0x00007fc2f44e2e60と記述があったので画像のURLのようなものはありました。

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

aws cloud9
rails 6.1

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

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

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

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

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

guest

回答2

0

自己解決

controllerのdef newの箇所に@greenhouse = Greenhouse.find(params[:format])の記述、
new.html.erbに<%= image_tag @greenhouse.image %>の記述をすることで解決できました。

投稿2021/07/14 12:56

Engineer_traine

総合スコア17

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

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

0

@greenhouse = Greenhouse.newなので
<%=image_tag @greenhouse.image %> のimage は nilでしょうね。
どんな画像を表示させたいのですか?

投稿2021/07/13 13:39

winterboum

総合スコア23567

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

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

Engineer_traine

2021/07/14 02:12

回答ありがとうございます。 .allに変更後も全画像表示ができると思いましたがダメでした。 @greenhouseに登録してる画像を@reserverでも表示したいと考えています。 具体的には@greenhouseに登録されている部屋のページから@reserverの予約ページに遷移できるようなリンクをつけておりそこから予約ページに遷移し、予約ページに画像を表示させたいです。 id1に登録されている画像から予約のページに遷移した際にイメージ画像としてid1を取得して画像を表示したいと考えています。 説明の方下手で申し訳ないです。
winterboum

2021/07/14 07:09

予約でしょうから @reserver = Reserver.new なのはわかりますが、 既に有るGesthouseを予約でしょうから @greenhouse = Greenhouse.new がおかしいです。予約対象のGesthouseを取り込んでください
Engineer_traine

2021/07/14 08:37

@greenhouse = find(params[:id])でidを取ってくるというように変更しましたが Couldn't find Greenhouse without an ID とidをうまく取得してこれないです。 手順が間違っているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問