2

Update My Profile Page のカスタム アクションを作成しようとしています。管理者のみがそのページを使用できるため、通常の users#edit または users#update アクションにすることはできません。

これが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

フォームを送信すると、次のようになります: Routing Error No route matches [PUT] "/update_profile/1"

rake routesupdate_profile アクションの出力によると GET であるため、エラーを理解しています。

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

4

1 に答える 1

4

usersリソースのメンバーとして追加する必要があります

resources :users do
  member do
    put :update_profile
  end
end

このようにして、それはまだユーザーリソースの一部であり、ルートは自動的に生成され、次のような方法でフォームにアクセスできますupdate_profile_user_path(@user)

于 2012-04-13T15:21:18.813 に答える