Поле редактирования пустое (рельсы 6.1.4)

avatar
sa0irxe
9 августа 2021 в 06:46
39
0
0

Я новичок в 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>
Источник
Claeusdev
9 августа 2021 в 12:28
0

Не могли бы вы поделиться своей формой?

max
9 августа 2021 в 13:52
0

Я предполагаю, что у вас есть form_for(Task.new) или form_with(model: Task.new) вместо фактического использования переменной экземпляра @task из вашего контроллера.

Les Nightingill
9 августа 2021 в 15:12
0

Я думаю, что представление, которое вы нам показали, - это не представление edit.html.erb, а представление show.html.erb (b/c нет тега формы, и у него есть ссылка на страницу редактирования). Можете ли вы проверить и показать нам вид редактирования.

Ответы (0)