Hello :)

Alors j'ai un soucis avec Ruby on Rails

J'ai un formulaire pour faire un update, et quand je lance le submit j'ais cette erreur:

Unknown action
The action 'update' could not be found for GamesController

Pourtant je n'ai rien fais de spécial, un CRUD tout ce qu'il y a de plus classique, du coup je ne sais pas ce qui se passe :/

Mon controller:

class GamesController < ApplicationController
    def update
      @game = Game.find(params[:id])
      @game.update(game_params)
    end

    private

    def game_params
      params.require(:game).permit(:title, :url, :prize, :game_type, :description, :short, :ended_at)
    end
  end
end

Mon formulaire:

<div>
  <%= form_with model: game, method: :patch do |form| %>
    <div>
      <%= form.text_field :title %>
    </div>

    <div>
      <%= form.text_field :game_type %>
    </div>

    <div>
      <%= form.date_field :ended_at %>
    </div>

    <div>
      <%= form.text_field :prize %>
    </div>

    <%= form.submit "Valider" %>
  <% end %>
</div>

Et mes routes:

Rails.application.routes.draw do
  root "games#index"

  resources :comments
  resources :games

  resources :profiles do
    get "/:section", to: "profiles#show"
  end

  resources :user_games, only: [ :index, :create, :destroy ]

  get 'dashboard', to: "dashboards#index"

  namespace :dashboards do
    resources :games, only: [ :index, :show ]
  end

  devise_for :users
end

Quelqu'un a une idée d'où pourrait venir le problème? ^^'

Merci :)

1 réponse


popotte
Auteur
Réponse acceptée

Ok alors, mon formulaire est la view dashboard, du coup il est bloqué dans le controller dashboard/games, et du coup game_path en controller ça fonctionne pas ça voulais quand même passer par le namespace dashboard

J'ai du faire ça:

url: "/games/" + game.id.to_s

Et la ça fonctionne, ça fait bricolé mais bon ^^'

D'après ce que tu montre ça a l'air bon, le nom du controller est bon (nom du fichier) ?

popotte
Auteur

yep, c'est games_controller, pour le create j'ai eu le même problème, j'ai été obligé de rajouter url: { controller: games_path, action: :create }

Et ça a fonctionné, du coup j'ai tenté la même chose avec l'update url: { controller: game_path(game), action: :update } mais la ça me donne

No route matches {:action=>"update", :controller=>"games/1"}

Pourtant c'est bien pris en compte avec rails routes:

game GET    /games/:id(.:format) games#show
                                         PATCH  /games/:id(.:format) games#update                                                                            
                                         PUT    /games/:id(.:format) games#update
                                         DELETE /games/:id(.:format) games#destroy