2016-04-08 156 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我很高兴,'耙路线'将有助于更容易理解生成路线文件的内容。 – 7urkm3n

0

首先,POST行为应该保留用于对象创建,而不是更新。使用PUTPATCH进行更新。

而且,在你的控制器(editupdatedestroy)关键行动是private这应该是公开的,以便能够进行路由。这是上一节中错误的来源。

简而言之,您的大部分问题都可以简单地使用resources :groupos来解决。这将产生一致的路线:

 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 

最后一点,你应该不是form_for :gropo用户form_for @grupo。这将允许从它们的匹配属性来动态填充在@grupo

+0

感谢您的澄清。但我试图只使用资源:grupos并没有工作。 –

相关问题