Action update not found

Par popotte, il y a 2 ans


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 :)

3 réponses

popotte, il y a 2 ans

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
popotte, il y a 2 ans

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 ^^'

Grafikart, il y a 2 ans

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