Rails为其他方法操作添加路由

时间:2014-02-06 23:17:03

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

我已经阅读了关于这个主题的一些其他问题和答案,但我仍然非常困惑。

我有一个带有标准功能的用户模型。我想添加一个类似于编辑/更新的页面,允许用户连接API。

我在控制器中构建了以下功能:

def deviceConnectEdit
  @user = User.find(params[:id])
end

def deviceConnectUpdate
  @user = User.find(params[:id])
  if @user.deviceConnectUpdate_attributes(user_params)
    flash[:success] = "Device Connected"
    redirect_to @user
  else
    render 'deviceConnect'
  end
end

非常类似于标准编辑/更新

我还构建了两个文件deviceConnectUpdate.html.erb和deviceConnectUpdate.html.erb(目前他们有一个

语句来查看它们何时被调用。

现在我运行rake routes

      users GET     /users(.:format)                     users#index
      POST          /users(.:format)                     users#create
      new_user GET  /users/new(.:format)                 users#new
      edit_user GET /users/:id/edit(.:format)            users#edit
      user GET      /users/:id(.:format)                 users#show
      PUT           /users/:id(.:format)                 users#update
      DELETE        /users/:id(.:format)                 users#destroy

当我拨打foobar/users/1/deviceConnectEdit时,我收到错误,指出路线不匹配。

如何修复此问题并添加路线。感谢

1 个答案:

答案 0 :(得分:1)

您仍然需要在config\routes.rb文件中声明路线。

另外,如果你想使用更多的惯用ruby(你这样做),你应该使用强调的方法名,而不是camelCase。例如device_connect_edit不是deviceConnectEdit。如果你不遵守惯例,你将会遇到麻烦(除非你有充分的理由离开它)。有鉴于此,我将在惯用Ruby中发布路由,并希望您更新您的方法名称: - )

resources :users do
  member do
    get 'device_connect_edit'
    post 'device_connect_update'
  end
end

此外,您可能希望强烈考虑将您的设计设置为单独的device资源,而不是在UsersController中添加它...