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

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

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

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

Ruby on Rails

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

Q&A

0回答

311閲覧

デフォルトで設定されるタスクのコピー回数を降順に並び替えたいです。

tomoya_nagai

総合スコア4

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/11/13 03:06

前提・実現したいこと

Ruby on Railsで建設業者向けの管理システムを作っています。
デフォルトで設定されるタスクのコピー回数を降順に並び替える機能を実装中で
その実現方法が分からず投稿致しました。

該当のソースコード

Ruby

1<div class="container"> 2 <h2> 3 デフォルトタスク一覧 4 <button class="btn btn-dark float-r" data-toggle="modal" data-target="#default-task-new"><i class="fas fa-plus"></i> 新規デフォルトタスク</button> 5 </h2> 6 <div class="card text-center tab-wrapper"> 7 <div class="card-header bg-dark"></div> 8 9 <div class="card-body"> 10 <table class="table table-sm table common-table"> 11 <tr> 12 <th>コピー回数</th> 13 <th>名前</th> 14 <th>内容</th> 15 <th></th> 16 </tr> 17 <% @default_tasks.each do |default_task| %> 18 <tr> 19 <td><%= Task.where(default_task_id: default_task.default_task_id).count - 1 %></td> 20 <td><%= default_task.title %></td> 21 <td><%= default_task.content %></td> 22 <td> 23 <button class="btn btn-sm btn-dark to-edit-default-task" data-toggle="modal" data-target="#default-task-edit" data-id="<%= default_task.id %>" 24 data-title="<%= default_task.title %>" data-content="<%= default_task.content %>"> 25 編集 26 </button> 27 <%= link_to "削除", employees_settings_task_path(default_task), method: :delete, data: { confirm: "本当に削除してよろしいですか?" }, class: "btn btn-sm btn-danger" %> 28 </td> 29 </tr> 30 <% end %> 31 </table> 32 </div> 33 </div> 34</div>

Ruby

1class Employees::Settings::TasksController < ApplicationController 2 before_action :authenticate_admin_or_manager! 3 before_action :set_employees_settings_tasks, only: :index 4 before_action :set_task, only: [:update, :destroy] 5 6 def index 7 @default_tasks = Task.are_default 8 @default_task = Task.new 9 end 10 11 def create 12 sort_order = Task.are_default.length 13 @default_task = Task.new(default_task_params.merge(status: 0, sort_order: sort_order)) 14 if @default_task.save 15 @default_task.update(default_task_id: @default_task.id) 16 flash[:success] = "デフォルトタスクを作成しました。" 17 redirect_to employees_settings_tasks_url 18 else 19 respond_to do |format| 20 format.js 21 end 22 end 23 end 24 25 def update 26 if @default_task.update(default_task_params) 27 flash[:success] = "デフォルトタスクを更新しました。" 28 redirect_to employees_settings_tasks_url 29 else 30 respond_to do |format| 31 format.js 32 end 33 end 34 end 35 36 def destroy 37 @default_task.destroy ? flash[:success] = "デフォルトタスクを削除しました。" : flash[:alert] = "デフォルトタスクを削除できませんでした。" 38 Task.reload_sort_order(Task.are_default) 39 redirect_to employees_settings_tasks_url 40 end 41 42 private 43 def set_employees_settings_tasks 44 @employees_settings_tasks = "employees_settings_tasks" 45 end 46 47 def default_task_params 48 params.require(:task).permit(:title, :content) 49 end 50 51 def set_task 52 @default_task= Task.find(params[:id]) 53 end 54end

Ruby

1class Task < ApplicationRecord 2 belongs_to :matter, inverse_of: :tasks, optional: true 3 4 validates :title, presence: true, length: { maximum: 30 } 5 validates :content, length: { maximum: 3000 } 6 7 enum status: {default: 0, relevant: 1, ongoing: 2, finished: 3} 8 9 scope :are_default, -> { default.order(:sort_order) } 10 scope :are_relevant, -> { relevant.order(:sort_order) } 11 scope :are_ongoing, -> { ongoing.order(:sort_order) } 12 scope :are_finished, -> { finished.order(:sort_order) } 13 14 # sort_orderを正しい連番に更新 15 def self.reload_sort_order(tasks) 16 tasks.order(:sort_order).each_with_index do |task, index| 17 task.update(sort_order: index) 18 end 19 end 20 21 # sort_orderを+1に更新 22 def self.increment_sort_order(matter, status, sort_order) 23 matter.tasks.where(status: status).where("sort_order >= ?", sort_order).each do |task| 24 new_sort_order = task.sort_order.to_i + 1 25 task.update(sort_order: new_sort_order) 26 end 27 end 28 29 # sort_orderを-1に更新 30 def self.decrement_sort_order(matter, status, sort_order) 31 matter.tasks.where(status: status).where("sort_order <= ?", sort_order).each do |task| 32 unless task.sort_order == 0 33 new_sort_order = task.sort_order.to_i - 1 34 task.update(sort_order: new_sort_order) 35 end 36 end 37 end 38 39 def self.convert_to_status_num(status) 40 case status 41 when "relevant-tasks" 42 1 43 when "ongoing-tasks" 44 2 45 when "finished-tasks" 46 3 47 end 48 end 49 50end

実現させたいこと

<% @default_tasks.each do |default_task| %>でloopさせた後のレコードで
コピー回数の多い順に表示させたい。

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

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

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

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

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

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

no1knows

2020/11/13 06:30

taskテーブルはどんな構成になっていますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問