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

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

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

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1582閲覧

rails 複数枚の画像保存後、他のページで一枚だけ表示したい

hs0330

総合スコア6

Ruby

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1グッド

0クリップ

投稿2020/03/13 08:06

編集2020/03/13 08:33

前提・実現したいこと

railsで4枚の画像を投稿できるAppを作っています。
投稿欄から複数の画像データ(boardsテーブル)とタイトルとテキスト(postsテーブル)をdbに保存することはできたのですがメインページにて4枚の中の最初の一枚だけをサムネイルとして表示させたいのですがエラーが出てしまいます。
初投稿でわかりにくいところもあると思いますがご教授おねがいします。

modelはuser(省略) ・ post(title/text) ・ borad(images)

環境
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin19]
gem 'carrierwave'(2.1.0)
Rails 5.2.4.1

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

NoMethodError at / undefined method `boards' for #<Post::ActiveRecord_Relation:0x00007fa55ed8a580> class PostsController < ApplicationController def index @posts = Post.includes(:user,:boards).limit(10).order("created_at DESC") @boards = @posts.**boards** end def new @post = Post.new 4.times {@board = @post.boards.build}

該当のソースコード

posts_controller.rb

ruby

1class PostsController < ApplicationController 2 def index 3 @posts = Post.includes(:user,:boards).limit(10).order("created_at DESC") 4 @boards = @posts.boards 5 end 6 7 def new 8 @post = Post.new 9 4.times {@board = @post.boards.build} 10 end 11 12 def create 13 @post = Post.new(post_params) 14 # respond_to do |format| 15 if @post.save 16 params[:boards][:images].each do |a| 17 @boards = @post.boards.create!(images: a, post_id: @post.id) 18 end 19 redirect_to root_path, notice: '投稿OK' 20 else 21 render :new 22 end 23 # end 24 end 25 26 def show 27 @post = Post.find(params[:id]) 28 @post_boads = @post.boads.all 29 @comment = Comment.new 30 @comments = @post.comments.includes(:user) 31 end 32 33 private 34 def post_params 35 params.require(:post).permit(:title, :text,boards_attributes: [:id, {images: []}, :post_id]).merge(user_id: current_user.id) 36 end 37 38end

index.html.haml

ruby

1 2.header 3 .header-top 4 .header-top__right 5 = link_to 'root_path' ,class: 'header-top__right--logo' do 6 4コマ 7 .header-top__left 8 - if user_signed_in? 9 = link_to "/users/#{current_user.id}" do 10 マイページ 11 = link_to destroy_user_session_path, method: :delete ,class: 'header-top__left--logout' do 12 ログアウト 13 - else 14 = link_to new_user_session_path ,class: 'header-top__left--lgn' do 15 ログイン 16 = link_to new_user_registration_path ,class: 'header-top__left--new' do 17 新規登録 18 = link_to new_post_path ,class: 'header-top__left--post' do 19 投稿する 20.wrapper 21 .main 22 .main-contents 23 %h1.main-new__title 24 新着4コマ 25 .new-contents 26 - @posts.each do |post| 27 .new-content 28 .new-content__img 29 = image_tag @boards[0].images.to_s 30 .new-content__title 31 = link_to post_path(post.id), class: 'new-content__title--top' do 32 = post.title 33 .new-content__user 34 = link_to "/users/#{post.user.id}", class: 'new-content__title--top' do 35 = post.user.name 36

model/board

ruby

1class Board < ApplicationRecord 2 mount_uploader :images, YonkomaUploader 3 belongs_to :post, optional: true 4end

model/post

ruby

1class Post < ApplicationRecord 2 validates :title, presence: true 3 belongs_to :user 4 has_many :comments 5 has_many :boards, dependent: :destroy 6 accepts_nested_attributes_for :boards, allow_destroy: true 7end 8

試したこと

色々変えてみたが変わらず。三時間ほどネット徘徊したがうまくいかなかったため質問します
参考urlリンク内容

s.k👍を押しています

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

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

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

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

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

guest

回答1

0

自己解決

postsテーブルにそもそも写真が投稿されていないものがあったのが原因ででした。
写真が投稿されていないpostsテーブルをすべて削除し

posts_controller

ruby

1def index 2 @posts = Post.includes(:user,:boards).limit(10).order("created_at DESC") 3 end

viwe

ruby

1= image_tag post.boards[0].images.to_s

とすればうまく表示できました。

投稿2020/03/13 11:44

hs0330

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問