因此,当然,只要指定 routes.rb 文件中的资源,就像...
resources :users
...此资源生成7个示例操作...
users#new (GET)
users#create (POST)
users#show (GET)
users#edit (GET)
users#update (PATCH/PUT)
users#destroy (DELETE)
现在,我想要实现和不能做的是向我的控制器文件添加额外的更新操作,以便它能够更新不同的参数。与第一次更新操作不同。
在我的 users_controller.rb 文件中,我有......
class UsersController < ApplicationController
.
.
.
# First update action
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
# Second update action
def update_number_two
@user = User.find(params[:id])
if @user.update_attributes(user_other_params)
flash[:success] = "Other params updated"
redirect_to @user
else
render 'other_view'
end
end
private
# Params for the first action
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
# Params for the second action
def user_other_params
params.require(:user).permit(:other_param)
end
end
所以我遇到的问题是,为了使上面的代码工作,我需要在routes.rb文件中添加一个自定义更新操作路由。
我尝试将此添加到我的路线...
patch 'users#update_number_two'
put 'users#update_number_two'
......以及其他一些事情,但都没有效果。
如果有人可以告诉我应该添加到我的routes.rb文件中,或者只是按照正确的方向推动我,那么感谢您的帮助。
答案 0 :(得分:6)
要向特定资源添加其他操作,您需要使用member
:
2.10添加更多RESTful操作
您不限于RESTful路由默认创建的七条路由。如果您愿意,可以添加适用于集合或集合中各个成员的其他路径。
resources :users do
member do
patch :update_number_two
put :update_number_two
end
end
然后,当您要更新时选择表单的不同action
(update_number_two_user_path
|| /users/:id/update_number_two
)
update_number_two_user PATCH /users/:id/update_number_two(.:format) users#update_number_two
PUT /users/:id/update_number_two(.:format) users#update_number_two
运行rake:routes
查看结果