ActionView :: Template :: Error (Нет подходящих маршрутов {: action => "destroy",: id => nil}, несоответствующие ограничения: [: id]): - PullRequest
0 голосов
/ 03 октября 2019

Я добавил кнопку «Интерес» на страницу показа событий, которая имеет два вида: Показать как 1) «Интерес», если у пользователя нет события в списке интересов. 2) «Удалить интерес», если у пользователя естьдобавили событие в список интересов

Однако при отображении событий страницы, которые были добавлены в список интересов, произошла ошибка. Кнопка / ссылка «Удалить интерес» вызывает следующие ошибки.

Вот сообщения об ошибках

ActionView :: Template :: Error (Нет подходящих маршрутов {: action => "destroy",: controller => "интересов",: id => ноль}, возможные несоответствующие ограничения: [: id]):

Из того, что я проверял, это, вероятно, происходит, потому что идентификатор интереса не переданна интересе_путь, хотя он у меня уже есть ...

Вид

    <div class="int-btn">
      <% if user_signed_in? && current_user.interested_events.include?(@event) %>
        <%= link_to interest_path(@interest), method: :delete, data: { confirm: "You have removed this event from your interest list" } do %>
          <div class = "btn btn-main m-2">Remove Interest</div>
        <% end %>
      <% else %>
        <%= link_to event_interests_path(@event), method: :post, data: { confirm: "You have add this event in your interest list" } do %>
          <div class = "btn btn-main m-2">Interested</div>
        <% end %>
      <% end %>
    </div>

Схема

  create_table "interests", force: :cascade do |t|
    t.bigint "user_id"
    t.bigint "event_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["event_id"], name: "index_interests_on_event_id"
    t.index ["user_id"], name: "index_interests_on_user_id"
  end

Маршруты

Rails.application.routes.draw do
  devise_for :users, controllers: { registrations: 'users/registrations' }
  root to: 'pages#home'

  resources :events do
    resources :interests, only:[:create]
    resources :reviews, only:[:create]
  end

  resources :plans, except:[:destroy] do
    resources :event_plans, only:[:create]
  end

  resources :reviews, only:[:destroy]
  resources :interests, only:[:destroy]

  get 'events/tagged', to: "events#tagged", as: :tagged
end

Контроллеры

class InterestsController < ApplicationController
  def create
    @event = Event.find(params[:event_id])
    @interest = Interest.new(interest_params)
    @interest.user = current_user
    @interest.event = @event
    authorize @interest
    if @interest.save
      redirect_to event_path(@event)
    else
      render 'events/show', event: @event
    end
  end

  def destroy
    @interest = Interest.find(params[:id])
    authorize @interest
    # @event.user = current_user
    @event = @interest.event
    @interest.destroy
    redirect_to event_path(@event)
  end

  private

  def interest_params
    params.require(:interest).permit(:user_id, :event_id)
  end
end

Модель

class Interest < ApplicationRecord
  belongs_to :user
  belongs_to :event
end

Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы или вам нужна дополнительная информация.

Благодарим вас за помощь!

1 Ответ

0 голосов
/ 03 октября 2019

В сообщении об ошибке говорится, что id off @interest равен нулю. Возможно, вы неправильно установили переменную @interest в действии show контроллера событий. Она должна выглядеть следующим образом:

class EventsController < ApplicationController
  def show
    # other code here
    @event = Event.find(params[:id])
    @interest = Interest.find_by(user: current_user, event: @event)
  end
end

Если к этой странице также могут получить доступ пользователи, которые не вошли в нее, она выдаст вам ошибку о текущем пользователе, для быстрого решения которой вы можете настроить ее следующим образом:

class EventsController < ApplicationController
  def show
    # other code here
    @event = Event.find(params[:id])
    if user_signed_in?
      @interest = Interest.find_by(user: current_user, event: @event)
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...