Я работаю над простым приложением списка задач rails для учебных целей, и одна из вещей, которые я хотел бы иметь в приложении, - это возможность создавать новый список в то же время, как я могу добавить взадачи в этом списке.Я завершил основные действия CRUD для создания списков, и теперь я хочу добавить возможность создания задач одновременно с созданием списков.
Я сделал некоторые из первоначальных ассоциаций, например так:
Модель "Мой список":
class List < ApplicationRecord
has_many :tasks
accepts_nested_attributes_for :tasks
end
Модель "Моя задача":
class Task < ApplicationRecord
belongs_to :list
end
Кроме того, я изменил свой list_params
, чтобы также вернуть задачи:
def list_params
params.require(:list).permit(:title, :public, task_attributes: [:text])
end
Теперь моя проблема в том, как написать форму для моего списка с возможностью добавления в него динамического числа задач, а затем отправить эти задачи в мое действие create
, чтобы сохранить его.
Мое new
действие так просто, как оно получается:
def new
@list = List.new
end
Моя текущая форма выглядит так:
<%= form_with scope: :list, url: lists_path, local: true do |form| %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :public %><br>
<%= form.check_box :public %>
</p>
<h2>Tasks</h2>
<%= form.fields_for :tasks do |task_form| %>
<p>
<%= task_form.label :text %><br>
<%= task_form.text_field :text %><br>
</p>
<% end %>
<p>
<%= form.submit %>
</p>
<% end %>
Я собираюсь использовать это в целях тестирования,сначала создать список с одной задачей, затем одну с двумя задачами, а затем, наконец, создать некоторый код, чтобы иметь возможность добавлять новые поля с помощью javascript, чтобы я мог создавать неопределенное количество задач.Однако проблема, к которой я пришел, заключается в том, что когда я отправляю эту форму и вызываю params
в моем действии create
, я вижу, что она содержит мою задачу:
params
{\"utf8\"=>\"✓\", \"authenticity_token\"=>\"...\", \"list\"=>{\"title\"=>\"list\", \"public\"=>\"0\", \"tasks\"=>{\"text\"=>\"task\"}}, \"commit\"=>\"Save List\", \"controller\"=>\"lists\", \"action\"=>\"create\"}"
Но когда я пытаюсь увидеть, что содержится в моем list_params
, то, что я получаю, пропускает задачи:
list_params
{\"title\"=>\"list\", \"public\"=>\"0\"}"
И, кроме того, если я добавлю два текстовых поля в форму задач, скажем, заполненных "task1" и "task2", то, что я получу в params
is only "task2", казалось бы, перезаписывая предыдущее задание.
Итак, мои проблемы
1) Я правильно делаю свою форму?Как мне изменить его, чтобы он позволял выполнять несколько задач?
2) Почему мой list_params
не возвращает никаких данных из задачи?
и я думаю, что в качестве бонуса мне не хватает чего-то еще, чтобы я мог сохранить список одновременно с его задачами?
РЕДАКТИРОВАТЬ: Вот ссылка на github для моегопроект, если кто-то хочет попробовать это: https://github.com/bpromas/task-list