Ответы пользователя по тегу Бэкенд
  • Как правильно сделать "приоритет" для задачи?

    insiki
    @insiki Автор вопроса
    broken pipe
    Отдельная модель + seeds.rb :)
    Ответ написан
    Комментировать
  • Как правильно сделать "статус" для задачи?

    insiki
    @insiki Автор вопроса
    broken pipe
    Сделал, используя AASM.
    Модель:
    class Task < ActiveRecord::Base
    
      include AASM
    
      aasm :column => 'status' do
        state :in_work, :initial => true
        state :completed
    
        event :run do
          transitions :from => :completed, :to => :in_work
        end
    
        event :complete do
          transitions :from => :in_work, :to => :completed
        end
      end

    Контроллер:
    class TasksController < ApplicationController
      before_action :find_task, only: [:show, :edit, :update, :destroy, :run, :complete]
      def run
        @task.run!
        redirect_to tasks_path
      end
      def complete
        @task.complete!
        redirect_to tasks_path
      end

    Представление:
    <% @tasks.each do |task| %>
        <% if task.in_work? %>
          <%= link_to 'Complete', complete_task_path(task), method: :put %>
        <% else %>
          <%= link_to 'Run', run_task_path(task), method: :put %>
        <% end %>
    <% end %>

    Роутинги:
    resources :tasks do
        member do
          put :run
          put :complete
        end
      end
    Ответ написан
    Комментировать
  • Как создать дочерний объект при связи self reference?

    insiki
    @insiki Автор вопроса
    broken pipe
    Ответ:
    Достаточно 1-го контролера - TasksController.
    В модель добавляем параметр "accepts_nested_attributes_for", который при создании объекта передает дополнительные параметры.
    class Task < ActiveRecord::Base
      has_many    :subtasks, class_name: 'Task', foreign_key: "parent_id"
      belongs_to  :parent, class_name: 'Task'
      accepts_nested_attributes_for :subtasks, allow_destroy: true
      belongs_to  :user
      belongs_to  :project
    end

    В контроллер добавляем дополнительные атрибуты для подзадачи:
    def task_params
      params.require(:task).permit(:title, :description, :priority, :status, :scheduled, :deadline, subtasks_attributes: [:title])
    end

    Сама же форма для создания подзадач выглядит так:
    <%= simple_form_for @task do |t| %>
      <%= t.simple_fields_for :subtasks, @task.subtasks.build do |f| %>
        <div class="form-inputs">
          <%= f.input :title %> 
        </div>
        <div class="form-actions">
          <%= f.button  :submit %>
        </div>
      <% end %>
    <% end %>
    Ответ написан
    Комментировать