У меня есть модель с автореферентными ассоциациями:Как создать дочерний объект для существующего объекта с ассоциативными ассоциациями?
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
смысл:
- Я создаю задачи
- Для некоторых задач я хочу добавить некоторые подзадачи
- Когда я «Я перехожу к task_path -/tasks /: id, action» tasks # show »- я вижу атрибуты задачи, но ниже я хочу иметь возможность добавлять подзадачи.
И некоторые вопросы дополнительно:
- Это хороший способ использовать одну модель для задач и подзадач?
- Нужно ли мне создавать второй контроллер?
Благодарим вас и простите за мой английский.
UPD1: TasksController
class TasksController < ApplicationController
before_action :find_task, only: [:show, :edit, :update, :destroy]
def index
@tasks = Task.where("parent_id IS ?", nil)
end
def show
end
def new
@task = Task.new
@task.subtasks.build
end
def edit
end
def create
@task = Task.create(task_params)
if @task.errors.empty?
redirect_to @task
else
render 'new'
end
end
def update
@task.update_attributes(task_params)
if @task.errors.empty?
redirect_to @task
else
render 'edit'
end
end
def destroy
@task.destroy
redirect_to tasks_path
end
private
def task_params
params.require(:task).permit(:title, :description, :priority, :status, :scheduled, :deadline, subtasks_attributes: [:title])
end
def find_task
@task = Task.find(params[:id])
end
end
show.html.erb для задач /: идентификатор (только черновик)
<%= @task.deadline %>
<%= @task.title %>
<%= @task.description %>
<% @task.subtasks.each do |s| %>
<br><%= s.title %>
<%= link_to 'Delete', [s], method: :delete, data: { confirm: 'Are you sure?' } %>
<% end %>
<%= simple_form_for @task do |t| %>
<%= t.simple_fields_for :subtasks do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :title %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
<% end %>
Как ни странно, OP [уже используемые вложенные атрибуты] (http://i.imgur.com/dewIK8Y.png). Отредактировал это по какой-то причине. –
oh ok, но для достижения значений подзадач в той же форме нам нужно «принять вложенные атрибуты для» – yogendra689
Да, я удалил его до и теперь вернулся. У меня проблемы с контроллером и просмотр для этого. – odinsy