Rails - маршрутизация на родительскую страницу показа с child_id - PullRequest
0 голосов
/ 12 января 2020

Я бы хотел перенаправить на страницу показа родителя (журнала) после удаления ребенка (привычки), используя child_id.

В моем приложении пользователь может создавать журналы, которые затем имеют несколько привычек. Я хотел бы иметь возможность удалить (и отредактировать) привычку, а затем вернуться на страницу показа журнала, где отображаются все привычки.

Получение следующих и похожих ошибок:

ActiveRecord :: RecordNotНайдено в HabitsController # destroy

journal.rb

class Journal < ApplicationRecord
    has_many :entries
    has_many :habits

    belongs_to :user
end

привыч.рб

class Habit < ApplicationRecord
    belongs_to :journal

    has_many :completed_dates
end

показать. html .erb

            <h3>Habits</h3>
            <% @journal.habits.each do |habit| %>
                <div iv class="habit-list">
                    <div class="habit-name"><%= habit.name %></div>
                    <div class="habit-status">
                        <%= simple_form_for [@journal, @habit] do |f| %>
                            <%= f.input :status, label: false, :inline_label => true %>
                        <% end %>
                    </div>
                    <div>
                        <%= link_to habit_path(habit), method: :delete do %>
                        <i class="fas fa-trash btn-edit"></i>
                        <% end %>
                    </div>
                </div>
            <% end %>

habits_controller.rb

class HabitsController < ApplicationController
    before_action :set_journal, only: [:new, :create, :edit, :update, :destroy]
    before_action :set_habit, only: [:show, :edit, :update, :destroy]
    def index
        @habits = Habit.all.sort_by &:name
    end

    def new
        @habit = Habit.new
    end

    def show
    end

    def create
        @habit = @journal.habits.new(habit_params)
        if @habit.save
            redirect_to journal_path(@journal)
        else
            render :new
        end
    end

    def edit
    end

    def update
        if @journal.habits.update(habit_params)
            redirect_to journals_path(@journal)
        else
            render :edit
        end
    end

    def destroy
        @habit.destroy
        redirect_to journal_path(@habit, @journal)
    end

    private

    def habit_params
        params.require(:habit).permit(:name, :status, :user_id, :journal_id)
    end

    def set_journal
        @journal = Journal.find(params[:journal_id])
    end

    def set_habit
        @habit = Habit.find(params[:id])
    end
end

1 Ответ

0 голосов
/ 12 января 2020

Вы пытаетесь создать URL для удаленного ресурса (@habit). Измените

def destroy
  @habit.destroy
  redirect_to journal_path(@habit, @journal)
end

на

def destroy
  @habit.destroy
  redirect_to journal_path(@journal)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...