2

我正在尝试为更新我的个人资料页面创建自定义操作。它不能是常规的 users#edit 或 users#update 操作,因为只有管理员可以使用该页面。

所以这就是我在 routes.rb 中的内容(附带问题:如何使链接变为 mydomain.com/users/update_profile 而不是 mydomain.com/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

当我提交表单时,我得到这个:路由错误没有路由匹配[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 回答