2014-04-05 30 views
0

,我想在我的applcation創造一個更新的形式對註冊用戶沒有路由匹配[POST] 「/用戶/編輯」

查看:

<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%> 

控制器: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 

我包括在routes.rb中得到「編輯」=>'用戶#編輯'。然而,我得到一個錯誤 '沒有路由匹配[POST]「/ users/edit」'

任何幫助表示讚賞。謝謝。

+0

而不是使用<%= form_for:user do | form | %>,嘗試用<%= form_for @user do | form |替換%> – LHH

+0

@Lalitharyani所以沒有其他更改控制器? – Krishna

+0

沒有必要爲您的路線文件中顯式定義編輯路線...只需添加資源:用戶,它將爲您的編輯動作創建默認路線 – LHH

回答

0

RESTful edit路由應使用GET謂詞。 vanilla resource#edit方法不會更改數據庫,但只是填充填充了選定資源值的表單。將該表格提交至resource#update(使用PUT動詞)可以完成實際更改數據庫的工作。

因此,您的users#edit方法沒有執行標準的RESTful編輯操作。我建議使用標準方法,除非你有一個非常好的理由,並仔細記錄這個原因。我同意花時間看軌道指南和香草控制器會很有用。

0

您需要一個POST路徑來處理表單提交。在routes.rb中嘗試resources :users,然後在命令提示符下執行rake routes以查看所有可用路由。

我建議您查看Rails Guides並查看使用scaffold創建的所有方法,以及Rails如何處理每種方法的不同事情的路由。

相關問題