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

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

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

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

Q&A

0回答

192閲覧

達成、未達成ボタンを作りたい。

atsu-ori2018

総合スコア5

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/15 07:29

編集2020/05/15 07:48

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

モデルにメソッドを書くというのが不慣れでして、何が問題なのか教えていただけるとありがたいです。
よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問