Rails 3.如何创建自定义PUT操作?

时间:2012-04-13 15:19:04

标签: ruby-on-rails ruby routes rake

我正在尝试为“更新我的个人资料”页面创建自定义操作。它不能是常规用户#edit或用户#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 routes的输出,update_profile操作是GET。

所以我需要把它改成PUT,但我不知道怎么做。如何在routes.rb?

中设置自定义PUT操作

1 个答案:

答案 0 :(得分:4)

您应该将其添加为users资源

的成员
resources :users do
  member do
    put :update_profile
  end
end

这样它仍然是您的用户资源的一部分,路线将自动生成,并可通过update_profile_user_path(@user)

等形式在您的表单中访问