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

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

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

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

Ruby

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

Q&A

解決済

1回答

1009閲覧

Trello風のタスク管理アプリのcardの移動

pancho

総合スコア12

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2020/06/27 06:34

前提・実現したいこと

Trello風のタスク管理アプリを試しに作っています。
ドラッグ&ドロップまでとは言わないですが
◀▶ボタンを押したら横のリストに移動できるようにしたいと思い
下記のようなコードを作りました。

該当のソースコード

DB/list

rails

1class CreateLists < ActiveRecord::Migration[5.2] 2 def change 3 create_table :lists do |t| 4 t.string :name, null: false 5 t.references :board, foreign_key: true 6 t.references :user, foreign_key: true 7 t.integer :number 8 9 t.timestamps 10 end 11 end 12end

DB/card

railrs

1class CreateCards < ActiveRecord::Migration[5.2] 2 def change 3 create_table :cards do |t| 4 t.string :name, null: false 5 t.references :list, foreign_key: true 6 t.references :admin, foreign_key: { to_table: :users } 7 t.integer :listnumber 8 9 t.timestamps 10 end 11 end 12end

view

rails

1<% count_list = @lists.count %> 2 <%= count_list %> 3 <% count = 1 %> 4 <% @lists.each do |list| %> 5 <% list.number = count %> 6 <th> 7 <div class="card" style="width: 250px"> 8 <div class="card-header"> 9 <%= link_to list.name, edit_list_path(list), :target=>["_blank"] %><%= list.number %> 10 </div> 11 <div class="card-body"> 12 <% if @cards.any? %> 13 <lu> 14 <% @cards.each do |card| %> 15 <% if card.list_id == list.id %> 16 <% card.listnumber = count %> 17 <% card.save %> 18 <li class="text-wrap"><a href="<%= card_path(card, :board_id => @board.id) %>"><%= card.name %><%= card.listnumber %><br> 19 20 <%# 期限が有るか %> 21 <% if card.deadline %> 22 <span class="badge badge-danger"><i class="far fa-clock"></i> <%= card.deadline.last %></span> 23 <% end %> 24 25 <%# 説明が有るか %> 26 <% if card.description %> 27 <span class="badge badge-light"><i class="fas fa-align-justify"></i></span> 28 <% end %> 29 30 <%# リストが有るか %> 31 <% if card.todolist %> 32 <span class="badge badge-light"><i class="far fa-check-square"></i> <%= card.todolists.count %></span> 33 <% end %> 34 35 <%# 画像が有るか %> 36 <% if card.attachment %> 37 <span class="badge badge-light"><i class="fas fa-paperclip"></i> <%= card.attachments.count %></span> 38 <% end %> 39 </a> 40 </li> 41 <%# 左へ移動 %> 42 <% unless count == 1 %> 43 <%= link_to '◀', moveright_card_path(card) %> 44 <% end %> 45 46 <%# 右へ移動 %> 47 <% unless count == count_list %> 48 <%= link_to '▶', moveright_card_path(card) %> 49 <% end %> 50 <% end %> 51 <% end %> 52 </lu> 53 <% end %></br> 54 <% @list_id = list.id %> 55 56 <%= link_to 'タスクの作成', new_card_path(:list_id => list.id) %> 57 </div> 58 </div> 59 </th> 60 <% count += 1 %> 61 <% end %>

下記のような感じのviewです
イメージ説明

cards_controller

rails

1def moveright 2 @card = Card.find(params[:id]) 3 @card.listnumber += 1 4 @card.save 5 @list = List.find_by(board_id: @card.list.board.id, number: @card.listnumber) 6 @card.list_id = @list.id 7 @card.save 8 redirect_back(fallback_location: root_path) 9 end

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

イメージ説明

試したこと

controllerの@card.list_id = @list.id の所で
エラーが出ているので
@list = List.find_by(board_id: @card.list.board.id, number: @card.listnumber)
でlistが取得できていないのだとは思うのですが、他に
@list = List.where(board_id: @card.list.board.id).where(number: @card.listnumber).first
などで取得しても同じエラーとなります。

取得の方法が悪く他に書き方があるのか
他に方法があるのかなどもネットで調べてみたのですが
検索の仕方が悪いのか見つけれないのでもしよければ助言いただけると助かります。

補足情報(FW/ツールのバージョンなど)

開発環境
AWS9
Rails5.2.4.1

プログラミング歴
8ヶ月

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

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

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

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

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

guest

回答1

0

ベストアンサー

でlistが取得できていないのだとは思うのですが

ということであれば、今後の事も考えて、まずはrails cやbyebugなどでデバッグをオススメします。
参考:https://www.youtube.com/watch?v=5fyrGslhUcY

投稿2020/06/27 07:33

no1knows

総合スコア3365

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

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

pancho

2020/06/27 07:57

ほぼ独学で来たのでデバッグの仕方など学ばず来ていたので 教えていただいたYouTubeを参考に一度勉強しなおしてきます! 参考YouTubeありがとうございます。
no1knows

2020/06/27 08:14

あぁ、やっぱり同じ境遇ですね。笑 デバッグができれば、やりたいことがスムーズに実装できるようになるかと思いますので是非! またどうしても解決できないことがあったりする場合はmenta.workなどを活用すると、コストパフォーマンス的にも良いかと思います。
pancho

2020/06/29 02:54

better_errorsを入れる事で あっちを見たりこっちを見たりしなくて済むようになり、 エラーヶ所はcontrollerの所でしたが、実際にはviewでクリックする前にミスが起きていたのに気づくことができ、無事解決できました! ありがとうございました。
no1knows

2020/06/29 03:59

それは良かったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問