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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

2944閲覧

image_tag : Carrierwaveでネストしてuploadした複数の画像データを表示できない

innjera

総合スコア132

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/04/12 14:56

編集2017/04/13 03:00

状況

  • Lesson(model)LessonImage(model、画像です)との間にhas_many / blongs_to(コードは以下に記載)の関連付けを持っています。
  • 画像Uploadには、Carrierwaveを利用し、新規にLessonを作成する際に、accepts_nested_attributes_forfields_forを使って同時に子レコードであるLessonImageも作成しています。
  • リストLessonhas_manyで所有するLessonImageの写真は0-3枚としています。画像をネストして複数アップロードすることはできています。
  • 1つのLessonに対して最大3つの'LessonImage'が付いており、それぞれは、例えば@lesson.lesson_images[0]@lesson.lesson_images.lastで呼べるのですが、以下記載の通りエラーが出てしまいます。 form_forfields_forを利用していることも原因な気もしておりますが、解決策わからず、御指南頂けますと助かります。

出てしまうエラー

undefined method url' for #<LessonImage:0x007fdeb2b92c68>といったエラーが出てしまい、各種記事を検索して試していますがうまくいきません。
イメージ説明

親である@lessonには子であるlesson_imagesが入っていることは、以下の通り確認しております。

@lesson.lesson_images LessonImage Load (0.6ms) SELECT "lesson_images".* FROM "lesson_images" WHERE "lesson_images"."lesson_id" = $1 [["lesson_id", 45]] => [#<LessonImage:0x007ff5b3f6a0a8 id: 7, lesson_id: 45, lesson_image: "a.JPG", created_at: Wed, 12 Apr 2017 22:58:18 JST +09:00, updated_at: Thu, 13 Apr 2017 08:41:47 JST +09:00>, #<LessonImage:0x007ff5b3f69f68 id: 8, lesson_id: 45, lesson_image: "f.jpg", created_at: Wed, 12 Apr 2017 22:58:45 JST +09:00, updated_at: Thu, 13 Apr 2017 08:41:47 JST +09:00>, #<LessonImage:0x007ff5b3f69e28 id: 9, lesson_id: 45, lesson_image: "v.jpg", created_at: Wed, 12 Apr 2017 23:03:33 JST +09:00, updated_at: Thu, 13 Apr 2017 08:43:03 JST +09:00>]

ruby

1関連付け 2#Lesson Model 3has_many :lesson_images, dependent: :destroy 4accepts_nested_attributes_for :lesson_images, allow_destroy: true 5 6#LessonImage Model 7class LessonImage < ApplicationRecord 8 belongs_to :lesson, optional: true(#Rails 5.0.0.1を利用) 9 mount_uploader :lesson_image, LessonImageUploader 10end 11 12#LessonImageのテーブル 13# Table name: lesson_images 14# 15# id :integer not null, primary key 16# lesson_id :integer 17# lesson_image :string 18# created_at :datetime not null 19# updated_at :datetime not null

ruby

1#edit.html.erb 2<%= form_for [:user, @lesson], url: :user_user_lesson, html: {multipart: true} do |f| %> 3 <%= render "form", f: f %> 4 <%= f.submit "編集する" %> 5 6#_form.html.erb 7<%= f.label :title, "レッスン名" %> 8<%= f.text_field :title %>等、lessonモデルのcolumnが並びます。 9 10<%= f.fields_for :lesson_images do |img|%> 11<%= image_tag img.object.url %> 12<%= img.check_box :remove_lesson_image %>画像を削除する<br> 13<%= img.label :lesson_image, "レッスン写真" %> 14<%= img.file_field :lesson_image %> 15<%= img.label :lesson_image, "レッスン写真" %> 16<%= img.file_field :lesson_image %> 17<% end %> 18

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

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

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

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

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

guest

回答1

0

ベストアンサー

式はこれでいいと思います。

ruby

1<%= f.fields_for :lesson_images do |img|%> 2<%= image_tag img.object.lesson_image.url %> 3<%= img.check_box :remove_lesson_image %>画像を削除する<br> 4<%= img.label :lesson_image, "レッスン写真" %> 5<%= img.file_field :lesson_image %> 6<% end %>

※objectはimg#FormBuilderをrecordへ変換します
問題はimg.object.urlがブラウザからアクセスできる場所にあるか?
とゆうことです。
試しに
<%= image_tag img.object.url %>

<%= img.object.url %>
に変えて
表示されたurlをブラウザに打ち込んで見てください。
表示できない場合画像の保存場所に問題があります。

投稿2017/04/12 15:58

編集2017/04/13 03:18
moke

総合スコア2241

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

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

innjera

2017/04/12 23:08

有難うございます! ご指摘の通りに直してみたところ、前に進んだとは思いますが、 以下のエラーが出てしまいます、色々検索していますが、わからず、解決策お分かりになればご教示お願い致します。 undefined method `url' for #<LessonImage:0x007fdeb2b92c68>
innjera

2017/04/12 23:20

御指南頂いたやり方を反映させた形で質問も修正しました。
moke

2017/04/13 00:35 編集

今更ですが、本当にCarrierwaveを使ってますか? Carrierwaveを使っているなら mount_uploader :image, ImageUploader というような記述があると思うのですが…。 書き忘れたなら それを記述してください。 もし使っていないなら、LessonImageのテーブル構造 を見せてください。
innjera

2017/04/13 03:01

返信有難うございます!Carrierwaveは使っております。LessonImage modelのコードから抜けており失礼しました。ついでにLessonImageのテーブツも同じコードの下に記載しております。何卒宜しくお願い致します。
moke

2017/04/13 03:19

回答も修正しておきましたが img.object.lesson_image.url とすればいいと思います。
innjera

2017/04/13 03:49

有難う御座います!!うまくいきました、大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問