没有路线匹配[POST]“/ users / edit”

时间:2014-04-05 15:48:54

标签: ruby-on-rails ruby rails-routing

我正在尝试为我的applcation

中的注册用户创建更新表单

查看:

<h2><%= @title =%></h2>

<% if @user.errors.any? %>
<div id="error">
<h2><%= pluralize(@user.errors.count,"error") %> prohibited this user from registering</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg%></li>
<%end%>
</ul>
</div>
<%end%>

<%= form_for :user do |form| %>

<div class="reg_form">
<label for="first_name">First Name: </label>
<%= form.text_field :first_name %>
</div>
<div class="reg_form">  
<label for = "last_name">Last Name: </label>
<%= form.text_field  :last_name %>
</div>
<div class="reg_form">
<%=form.submit "Update"%>
</div> 
<%end%>

Controller:users_controller.rb

def index
    unless session[:user_id]
        flash[:notice] = "Please Login first"
        redirect_to :action => "new"
    end
    @title = "Profile"
    @user=User.find(session[:user_id])
end


def edit
    @title="Profile Update"
    @user = User.find(session[:user_id])
    if param_posted?(:user)
        if @user.update_attributes(params[:user])
            flash[:notice] = "Update Successful"
            redirect_to :controller => "user", :action => "profile"
        end
    end
end

我收录了&#34;编辑&#34; =&gt; &#39;用户编辑#&#39;在routes.rb中。但是,我收到一个错误     &#39;没有路线匹配[POST]&#34; / users / edit&#34;&#39;

感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

您需要POST路线来处理表单提交。在routes.rb中尝试resources :users并在命令提示符下执行rake routes以查看所有可用路由。

我建议您查看Rails Guides并查看使用scaffold创建的所有方法,以及Rails如何处理针对每种方法的不同内容的路由。

答案 1 :(得分:0)

RESTful edit路由应使用GET动词。 vanilla resource#edit方法不会更改数据库,而只是放置一个填充了所选资源值的表单。将该表单提交到resource#update(使用PUT动词)可以实际更改数据库。

因此,您的users#edit方法不会执行标准RESTful编辑操作。除非你有充分的理由并且你仔细记录了这个原因,否则我建议使用标准方式。我同意花时间查看rails路由指南和一个vanilla控制器会很有用。