Ошибка Noob: Не найдено ни одного маршрута [POST] "/users/1/edit"

Ооооо... Я нуб, и я не нашел ответа, который бы помог мне пройти через это. Я боролся с этим и знаю, что это простой вопрос, но я просто недостаточно опытен, чтобы знать, как решить этот вопрос.

Я получаю сообщение об ошибке:

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 ответа

Решение

+ Изменить

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

в

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

В этом случае вам не нужно указывать действие для использования. Соглашения по умолчанию в Rails позаботятся об этом за вас.

Как вы уже получили ответ, так что в качестве предложения вы также можете добавить параметр метода, как здесь

<%= form_for @user, url: edit_user_path(@user), method: :get do |f| %>
  ...
<% end %>
Другие вопросы по тегам