Noob错误:没有路由匹配[POST]" / users / 1 / edit"

时间:2015-07-18 03:55:45

标签: ruby-on-rails

Sooo ...我是一个菜鸟,我还没有找到一个能让我度过难关的答案。我一直在努力解决这个问题,我知道这是一个简单的问题,但我没有足够的经验知道如何解决这个问题。

我收到错误:

No route matches [POST] "/users/1/edit"

以下是问题的路线:(简单,我知道)

Rails.application.routes.draw do
resources :users

这是控制器:

class UsersController < ApplicationController
  def new
    @user=User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to users_path
    else
      render 'new'
    end
  end

  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(user_params)
      redirect_to @user
    else
      render 'edit'
    end
  end

  def delete
    @user = User.find(params[:id])
  end

  def destroy
    @user = User.find(params[:id])
    @user.destroy
    redirect_to(:action => 'index')
  end

  def show
    @user = User.find(params[:id])
  end

  def index
    @users=User.all.order("created_at ASC")
  end

  private

    def user_params
      params.require(:user).permit(:first_name, :last_name, :username, :admin, :email, :birthday)
    end

end

以下是观点:

<DOCTYPE!! HTML>
<html>
<h1>Edit User</h1>
    <%= @user.username %>
    <%= link_to "Back to User Index", users_path %>
<%= form_for(:user, :url => {:action => 'edit'}) do |f| %>
    <table summary="Edit user form fields">
        <tr>
            <th>First Name</th>
            <td><%= f.text_field(:first_name) %></td>
        </tr>
        <tr>
            <th>Last Name</th>
            <td><%= f.text_field(:last_name) %></td>
        </tr>
        <tr>
            <th>Username</th>
            <td><%= f.text_field(:username) %></td>
        </tr>
        <tr>
            <th>Password</th>
            <td><%= f.text_field(:password) %></td>
        </tr>
        <tr>
            <th>Birthday</th>
            <td><%= f.date_field(:birthday) %></td>
        </tr>
        <tr>
            <th>Is Admin?</th>
            <td><%= f.text_field(:admin) %></td>
        </tr>
    </table>

<%= submit_tag("Update User") %>

<% end %>
</html>

我知道这可能不值得你回答,但我还没有能够弄明白。请帮助,如果您需要更多信息,请告诉我。提前再次感谢!

2 个答案:

答案 0 :(得分:1)

更改

<%= form_for(:user, :url => {:action => 'edit'}) do |f| %>

<%= form_for(@user) do |f| %>

在这种情况下,您不需要指定要使用的操作。 Rails中的默认约定将为您解决此问题。

答案 1 :(得分:0)

由于您已经得到了答案,因此建议您也可以添加方法参数here

<%= form_for @user, url: edit_user_path(@user), method: :get do |f| %>
  ...
<% end %>