前提・実現したいこと
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 %>
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ヶ月
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/27 07:57
2020/06/27 08:14
2020/06/29 02:54
2020/06/29 03:59