如何在一个Controller

时间:2015-07-16 18:48:49

标签: ruby-on-rails ruby-on-rails-4 routes

因此,当然,只要指定 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文件中,或者只是按照正确的方向推动我,那么感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

要向特定资源添加其他操作,您需要使用member

  

2.10添加更多RESTful操作

     

您不限于RESTful路由默认创建的七条路由。如果您愿意,可以添加适用于集合或集合中各个成员的其他路径。

resources :users do
  member do
    patch :update_number_two
    put :update_number_two
  end
end

然后,当您要更新时选择表单的不同actionupdate_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查看结果

更多信息:Adding More RESTful Actions