我正在尝试为“更新我的个人资料”页面创建自定义操作。它不能是常规用户#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操作答案 0 :(得分:4)
您应该将其添加为users
资源
resources :users do
member do
put :update_profile
end
end
这样它仍然是您的用户资源的一部分,路线将自动生成,并可通过update_profile_user_path(@user)