Ошибка 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 %>