ActionController :: ParameterMissing в TagsController # создать - PullRequest
0 голосов
/ 11 ноября 2018

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

Tag Controller

class TagsController < ApplicationController
before_action :require_user, only: [:edit, :update, :destroy]
before_action :set_search

def new
    @tag = Tag.new
end

def create
    tag = Tag.create(tag_params)
    if tag.save
        redirect_to tags_path
    else
        redirect_to sign_up_path
    end
end

def destroy
    @tag = Tag.find(params[:tag_id])
    @tag.destroy

    redirect_to tags_path
end

private
    def tag_params
        params.require(:tag).permit(:name)
    end
end

Маршруты

Rails.application.routes.draw do
  # For details on the DSL available within this file, see 
http://guides.rubyonrails.org/routing.html
  resources :recipes do
    resources :ingredients, :steps
    put :favorite, on: :member
  end

  resources :users

  get 'recipes' => 'recipes#index'
  get 'recipes/:id' => 'recipes#show'

  get 'signup' => 'users#new'

  get 'tags' => 'tags#index'
  get 'new_tags' => 'tags#new'
  post 'tags' => 'tags#create'
  delete 'tags' => 'tags#destroy'

  get 'login' => 'sessions#new'
  post 'login' => 'sessions#create'
  delete 'logout' => 'sessions#destroy'

  root 'recipes#index'

end

Индекс

  <%= link_to 'New Tag', new_tags_path(@tag) %> 

  <% Tag.find_each do |tag| %>
    <%= tag.name %>
    <%= link_to 'Delete Tag', @tag,
              method: :destroy,
              data: { confirm: 'Are you sure?' } %>
  <% end %>

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Ошибка возникла из-за сочетания проблем в операторе «Связать с» в представлении. Ссылка, как и должно быть написано ниже ...

<%= link_to 'Delete Tag', tag_path(tag),
          method: :delete,
          data: { confirm: 'Are you sure?' } %>
0 голосов
/ 11 ноября 2018

Этот маршрут:

delete 'tags' => 'tags#destroy'

означает «/ tags» без параметра id.

Вы должны указать маршрутизатору, что вы хотите, чтобы часть URL использовалась как :tag_id

delete 'tags/:tag_id' => 'tags#destroy'

В любом случае, я бы порекомендовал вам придерживаться правил рельсов и просто использовать

resources :tags

и на контроллере

@tag = Tag.find(params[:id])

Я не уверен, почему вы устанавливаете маршруты вручную, если вы новичок в Rails, прочитайте эту ссылку: https://guides.rubyonrails.org/routing.html

У вас даже есть эти строки

get 'recipes' => 'recipes#index'
get 'recipes/:id' => 'recipes#show'

, которые не нужны, поскольку resources :recipes уже создает их.

...