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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

2357閲覧

紐付けたModel画像のviewパスが分からない。(rails)

yamady

総合スコア176

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2017/06/22 00:41

いつもお世話になっております。
単純な質問かと思いますが、シンプルがゆえになかなか回答文献がなくて困っています。

こちらの記事を参考にして、モデルに紐付けた画像をviewに表示させたいと考えているのですが、なぜかうまくいかずに困っています。

管理画面よりファイルのアップロードはできていたので、画像自体は保存されているかと思いますがパスがうまくいっておらず、下記のエラーが表示されてしまいます。

ruby

1NoMethodError 2 3undefined method `thumbnail'

##該当するソースコード

prototypeにthumbnailが紐付いていて、thumbnailに入っている画像を表示させたいという想定になります。

view

ruby

1 <div class="item active"> 2 <%= image_tag(@prototype.thumbnail.image_1) %> 3 </div>

image_1はthumbanilに入ったカラムの名前です。

prototypeモデル

ruby

1class Prototype < ApplicationRecord 2 has_many :thumbanils 3 accepts_nested_attributes_for :thumbnails 4end

thumbnailモデル

ruby

1class Thumbnail < ApplicationRecord 2 belongs_to :prototype 3end

prototyprコントローラ

ruby

1class PrototypeController < ApplicationController 2 def create_params 3 params.require(:prototypes).permit(thumbnails_attributes: [:image, :image_1, :image_2, :image_3]) 4 end 5end

###試してみたこと

ビューのパスをいろいろ変えてみましたが、できませんでした。。

ruby

1 <div class="item active"> 2 <%= image_tag(prototype.thumbnail.image_1) %> 3 </div>

ruby

1 <div class="item active"> 2 <%= image_tag(thumbnail.image_1) %> 3 </div>

いきあったりばったりじゃ、解決せず。。

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

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

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

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

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

guest

回答1

0

ベストアンサー

別のご質問から、またとんできちゃいました。

まず、PrototypeモデルとThumbnailモデルはhas_manyの関係になっているので、
@prototype.thumbnail
でなく、
@prototype.thumbnails
で複数取得する必要があるのではないかと思います。

もし、prototypeに紐づくthumbnailが一つなら、has_manyではなくbelongs_toやhas_oneにかえます。
そうでなく、複数紐づくならview内部でループして全部表示します。(おそらくこちらなので下記にサンプルつけますね。)

あと、気になる点があり、
@prototype.thumbnail.image_1
としている点です。
carrierwaveを使うと、image画像のurlは モデル.属性.url(ex. thubmnail.image.url) で取得できます。

ですので、viewでの表示は

html

1<% @prototype.thumbnails.each do |thumbnail| %> 2 <%= image_tag thubnail.url %> 3<% end %>

というイメージになるのではないかと思います。

なお、carrierwaveの機能でimageをリサイズしたバージョンを自動作成することができたりします(フルサイズ画像だと表示が重くなるので、縮小版を作ったりします。) その場合は画像urlの取得の仕方が変わるので一度リファレンスを見てみるといいかもしれませんよ。
管理画面向けだと思いますので、直近は必要ないかと思いますが。

投稿2017/06/22 03:35

h_daido

総合スコア824

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

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

yamady

2017/06/23 13:47

ありがとうございます!! できました!! carrierwaveの使い方、もう一度勉強しなきゃな。。と思いました! 本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問