2016-04-08 25 views
1

Ruby on Railsを学び始めていますが、これまではすべてが順調に進んでいましたが、最終的には解決できない問題が発生しました。私は、フォーム上の情報を編集し、私は更新を与えるためにクリックすると、それは私に次のエラー(私の英語のため申し訳ありませんが、私は言語に堪能ではないよ)を提示:ルーティングエラー[POST]に一致するルートがありません

Routing Error 
No route matches [POST] "/grupos/14/edit" 

Rails.root: C:/Ruby/Projetos/florarails 

Application Trace | Framework Trace | Full Trace 
Routes 

outes match in priority from top to bottom 

Helper   HTTP Verb  Path     Controller#Action 

grupos_path GET  /grupos(.:format)   grupos#index 
       POST  /grupos(.:format)   grupos#create new_grupo_path 
       GET  /grupos/new(.:format)  grupos#new 
edit_grupo_path 
       GET  /grupos/:id/edit(.:format) grupos#edit 
grupo_path 
       GET  /grupos/:id(.:format)  grupos#show 
       PATCH  /grupos/:id(.:format)  grupos#update 
       PUT  /grupos/:id(.:format)  grupos#update 
       DELETE  /grupos/:id(.:format)  grupos#destroy 

をここに私のコード・コントローラは、次のとおりです。ここで

class GruposController < ApplicationController 
    def index 
    @grupos = Grupo.all 
    end 

    def show 
    @grupo = Grupo.find(params[:id]) 
    end 

    def new 
    @grupo = Grupo.new 
    end 

    def create 
    @grupo = Grupo.new(user_params) 
    if @grupo.save 
     flash[:aviso] = 'Grupo salvo com sucesso' 
    else 
     flash[:erro] = 'Erro ao salvar grupo' 
    end 
    redirect_to (@grupo) 
    end 

    private 

    def user_params 
    params.require(:grupo).permit(:descricao) 
    end 

    def edit 
    @grupo = Grupo.find(params[:id]) 
    end 

    def update 
    @grupo = Grupo.find(params[:id]) 
    if @grupo.update_attributes(params[:grupo]) 
     flash[:aviso] = 'Grupo salvo com sucesso' 
    end 
    redirect_to grupos_path 
    end 

    def destroy 
    @grupo = Grupo.find(params[:id]) 
    @grupo.destroy 
    flash[:info] = "Grupo excluido com sucesso" 
    redirect_to(grupos_path) 
    end 
end 

は私のビューのコードです:ここで

<%= form_for :grupo do |f| %> 
    <p>Edição de Grupos</p> 
    <%= f.label :descricao, "Descrição:" %>: 
    <%= f.text_field :descricao, :size => 40 %> 
    <%= f.submit "Alterar Dados" %> 
<% end %> 

は、ファイル内容routes.rbを次のとおりです。

Rails.application.routes.draw do 

    resources :grupos 
    match 'grupos/:id', controller: 'grupos', action: 'show', via: 'get' 
    match 'grupos/:id/edit', controller: 'grupos', action: 'edit', via: 'get' 
    match 'grupos/:id/edit', controller: 'grupos', action: 'update', via: 'post' #(When this line is added another error is displayed on the screen >> "Unknown action The action 'update' could not be found for GruposController") 

end 

ご注意いただきありがとうございます。

答えて

0

で彼らのマッチング属性から移入できるようになります。この方法を試してください。

<%= form_for :grupo, url: :grupo_path do |f| %> 
    <p>Edição de Grupos</p> 
    <%= f.label :descricao, "Descrição:" %>: 
    <%= f.text_field :descricao, :size => 40 %> 
    <%= f.submit "Alterar Dados" %> 
<% end %> 

はまた、あなたはそのmatchラインルートに必要なのです。 resources :gruposが対象となります。

削除:明確化のため

match 'grupos/:id', controller: 'grupos', action: 'show', via: 'get' 
match 'grupos/:id/edit', controller: 'grupos', action: 'edit', via: 'get' 
match 'grupos/:id/edit', controller: 'grupos', action: 'update', via: 'post' 
+0

あなたが書いた手順に従ってください。どうもありがとうございます!!! –

+0

@LucasRuy嬉しいですが、 'rake routes'はルートファイルを生成するものを理解しやすくなります。 – 7urkm3n

0

最初に、POSTアクションは、オブジェクトの作成ではなく更新するために予約する必要があります。アップデートにはPUTまたはPATCHを使用してください。

はまた、あなたのコントローラ内のキーアクション(editupdate、およびdestroy)はルーティング可能にするために、公開する必要がありますprivateです。最後のセクションでエラーの原因となるのはどれですか。

簡単に言えば、ほとんどの問題はresources :grouposを使用して解決されます。これは一貫したルートが生成されます:あなたはユーザーform_for @grupo代わりのform_for :gropo、最後の注意として

 grupos GET  /grupos(.:format)   grupos#index 
      POST  /grupos(.:format)   grupos#create 
    new_grupo GET  /grupos/new(.:format)  grupos#new 
    edit_grupo GET  /grupos/:id/edit(.:format) grupos#edit 
     grupo GET  /grupos/:id(.:format)  grupos#show 
      PATCH  /grupos/:id(.:format)  grupos#update 
      PUT  /grupos/:id(.:format)  grupos#update 
      DELETE  /grupos/:id(.:format)  grupos#destro 

をすべきです。これはあなたのフォームフィールドを動的に@grupo

+0

感謝。しかし、私はリソースだけを使用しようとしました:gruposと働いていなかった。 –

関連する問題