Я новичок в Ruby on Rails, и у нас есть проект TaskApp.
У него 2 модели: Категория, Задача.
Категория содержит много задач, и задача принадлежит категории.
Когда я перехожу от индекса задач к редактированию задачи, я получаю представление редактирования с пустыми полями.
Пожалуйста, найдите соответствующие коды ниже.
Я благодарен за любой совет, который поможет мне решить эту проблему.
routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: { registrations: 'registrations' }
get 'home/index'
root 'home#index'
resources :categories do
resources :tasks
end
end
tasks_controller.rb
class TasksController < ApplicationController
before_action :authenticate_user!
before_action :set_category, except: %i[index edit]
before_action :set_task, only: %i[show update destroy]
def index
@tasks = Task.where(user_id: current_user.id, deadline: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day).order(priority: :asc)
end
def new
@task = @category.tasks.build
end
def show
end
def create
@task = @category.tasks.create(task_params.merge(user_id: current_user.id))
respond_to do |format|
if @task.save
format.html { redirect_to @task.category, notice: "Task was successfully created." }
format.json { render :show, status: :created, location: @task.category }
else
format.html { redirect_to @task.category, notice: "Invalid inputs." }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
def edit
@category = Category.find(params[:category_id])
@task = @category.tasks.find(params[:id])
end
def update
respond_to do |format|
if @task.update(task_params)
format.html { redirect_to @task.category, notice: 'Task was successfully updated.' }
format.json { render :show, status: :ok, location: @task }
else
format.html { render :edit }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
def destroy
@task.destroy
respond_to do |format|
format.html { redirect_to @task.category, notice: 'Task was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def set_category
@category = Category.find(params[:category_id])
end
def set_task
@task = @category.tasks.find(params[:id])
end
def task_params
params.require(:task).permit(:name, :description, :priority, :deadline, :completed, :user_id, :category_id)
end
end
.../tasks/views/edit.html.erb
<div>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
<th>Priority</th>
<th>Deadline</th>
<th>Completed</th>
<th>Action</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<% @category.tasks.each do |task| %>
<% if task.user_id == current_user.id %>
<tr>
<td><%= link_to task.name, [task.category, task] %></td>
<td><%= task.description %></td>
<td><%= task.priority %></td>
<td><%= task.deadline.strftime("%d %b %Y") %></td>
<td><%= task.completed %></td>
<td><%= link_to 'Edit', edit_category_task_path(task.category, task) %></td>
<td><%= link_to 'Delete', [task.category, task],
method: :delete,
data: { confirm: 'Are you sure?' } %>
</td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
</div>
Не могли бы вы поделиться своей формой?
Я предполагаю, что у вас есть
form_for(Task.new)
илиform_with(model: Task.new)
вместо фактического использования переменной экземпляра@task
из вашего контроллера.Я думаю, что представление, которое вы нам показали, - это не представление edit.html.erb, а представление show.html.erb (b/c нет тега формы, и у него есть ссылка на страницу редактирования). Можете ли вы проверить и показать нам вид редактирования.