listsテーブルに登録されているlistに達成、未達成の項目をつけたいです。
達成、未達成はusersのshowページに設置したいのですがエラーが出ていまして困っております。
エラー文 NoMethodError in Users#show Showing /Users/okabeatsushi/projects/original-app/app/views/users/show.html.haml where line #43 raised: undefined method `achieves' for #<List::ActiveRecord_Associations_CollectionProxy:0x00007faee8e8a910>
achievesモデルを作成しました。ルーティングはlistsモデルにネストさせてます。
resources :lists do resource :achieves, only: [:create, :destroy] resource :likes, only: [:create, :destroy] resources :comments, only: [:index, :create, :destroy] end
achievesコントローラーではcreate deleteを下記のようにしました。
class AchievesController < ApplicationController def create @achieve = current_user.Achieve.create(list_id: params[:list_id]) redirect_back(fallback_location: root_path) end def destroy @list = List.find(params[:list_id]) @achieve = current_user.likes.find_by(list_id: @list.id) @achieve.destroy redirect_back(fallback_location: root_path) end end
肝心の達成、未達成を表示したいusers/showは現状このようにしてあります。
users_controller.rb def show @user = User.find(params[:id]) @lists = @user.lists.all.order("created_at DESC").page(params[:page]).per(10) @total_budget = @lists.sum(:budget) @achieves = Achieve.all end
すでに達成がされているかどうかを判断するために、以下のメソッドをuser.rbに書きました。エラー文ではここに問題があるようです。
models/user.rb def already_achieved?(list) self.lists.achieves.exists?(list_id: list.id) end これ以外に試した書き方は def already_achieved?(list) self.achieves.exists?(list_id: list.id) end def already_achieved?(list) @lists.achieves.exists?(list_id: list.id) end ~追記~ def already_achieved?(list) self.achieves.exists?(list_id: list.id) end 上記に変えて見た所、エラーの表示が NameError in Users#show Showing /Users/okabeatsushi/projects/original-app/app/views/users/show.html.haml where line #43 raised: uninitialized constant User::Achiefe と出ました。NoMethodエラーからNameErrorに変わったのはまた何かあるのでしょうか。 とてもわかりません。 お願いいたします。
users/show.html.haml - if current_user.already_achieved?(list) .lists__box-achieved = link_to "未達成", list_achieves_path(list.id), method: :delete - else .lists__box-achieved = link_to "達成", list_achieves_path(list.id), method: :post
モデルにメソッドを書くというのが不慣れでして、何が問題なのか教えていただけるとありがたいです。
よろしくお願いします。
あなたの回答
tips
プレビュー