2012-04-13 11 views
2

私のプロフィールの更新ページのカスタムアクションを作成しようとしています。 Adminsだけがそのページを使用できるので、通常のユーザー#editまたはユーザー#updateアクションはできません。Rails 3.カスタムPUTアクションの作成方法は?

だからこれは私がroutes.rbを中に持っているもの(側の質問です:どのように私は、リンクではなくmydomain.com/update_profileのmydomain.com/users/update_profileになることができます

get 'update_profile/:id' => "users#update_profile", :as => 'update_profile' 

_form.html?私は、フォームを送信すると.erb

<%= form_for @user, :url => update_profile_path(@user) do |f| %> 
    <%= render :partial => "form", :locals => {:f => f} %> 
<% end %> 

users_controller.rb

def update_profile 
    @user = User.find(params[:id]) 
    respond_to do |format| 
    if @user.update_attributes(params[:user]) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
    else 
     format.html { render action: "edit" } 
    end 
    end 
end 

私はこれを取得:ルーティングエラーNoルートマッチ[PUT] "/ update_profile/1"

rake routesの出力に応じてupdate_profileアクションがGETであるので、私はエラーを理解しています。

私はPUTに変更する必要がありますが、私はどのようにわかりません。 routes.rbでカスタムPUTアクションを設定するにはどうすればよいですか?

+0

update_profile /:id''を 'put 'に変更するのと同じくらい単純ではありませんか? –

答えて

4

あなたのusersリソース

resources :users do 
    member do 
    put :update_profile 
    end 
end 

それはまだユーザーのリソースの一部になり、ルートが自動的に生成され、update_profile_user_path(@user)のようなものを通して、あなたの形でアクセスできるように、この方法のメンバーとして追加する必要があります

+0

このURL「http:// localhost:3000/users/1/update_profile」で「IDなしでユーザーを検索できませんでした」というエラーが表示されます。私も 'put 'update_profile /:id''を試してみました。 – leonel

+0

恐ろしい、ありがとう! :D – leonel

関連する問題