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