お世話になっております。
現在、画像の投稿アプリケーションを作成しています。
#解決したい事
ユーザーマイページで、投稿した画像を一覧表示させたい。
#仮説
tweetsコントローラのインスタンス変数をusers/show.html.hamlで用いようとしているから
#実装した事
usersコントローラのshowアクションに @images = current_user.image
を付与したら
undefined method `image'
のエラーが出た。
#以上からわからない事
アソシエーションを組んでいるのに、なぜ別テーブルのカラムをコントローラに記述できないのか。
下記がコードです。
tweets.controller.rb
class TweetsController < ApplicationController before_action :set_tweet, only: [:edit, :show] def index @tweets = Tweet.all.order(created_at: :desc).includes(:user) end def new @tweet = Tweet.new end def create Tweet.create(tweet_params) end def destroy tweet = Tweet.find(params[:id]) tweet.destroy end def edit end def update tweet = Tweet.find(params[:id]) tweet.update(tweet_params) end def show end private def tweet_params params.require(:tweet).permit(:name, :image, :text).merge(user_id: current_user.id) end def set_tweet @tweet = Tweet.find(params[:id]) end end
users.controller.rb
class UsersController < ApplicationController def show @nickname = current_user.nickname @images = current_user.image end end
tweet.rb
class Tweet < ApplicationRecord validates :image, presence: true mount_uploader :image, ImageUploader belongs_to :user end
user.rb
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :email, presence: true, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i } validates :password, presence: true, length: {minimum: 7},format: { with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{7,128}+\z/i, message: "は英字と数字両方を含むパスワードを設定してください" } has_many :tweets end
tweets/show.html.haml
= render "header" .main .contents .h1.contents__head ○○さんの投稿 .contents__item .contents__item--image{style: "background-image: url(#{@tweet.image});"} .info-contents %p= Date.today %p= @tweet.name %p= @tweet.text = link_to 'トップへ戻る', root_path = render "footer"
users/show.html.haml
.tweetsTitle = @user.nickname さんの投稿一覧 .contents .contents__item - @tweets.each do |tweet| .contents__item--image{style: "background-image: url(#{tweet.image});"}
最下部 ↑ users/show.html.hamlのtweet.imageの記述でエラーが出ています。
単純な問題かもしれないですが、ご教授よろしくお願い致します。
#追記
問題のusers.controller.rbに記述していた
@images = current_user.tweets.imageを
image以外のカラムのnameカラムに変更してみました。
@images = current_user.tweets.name
そうしたらエラーが解決しました。
each文の@tweetの定義エラー等が出たので、
現在のusers.controller.rbはこちらになります。
class UsersController < ApplicationController def show @nickname = current_user.nickname @images = current_user.tweets.image @tweets = Tweet.all end end
やはり、imageにするとエラーが出ます。
エラー文です。
NoMethodError in UsersController#show undefined method `image' for #<Tweet::ActiveRecord_Associations_CollectionProxy:0x00007f35acdd8248>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/27 09:57
2020/08/27 10:06