4

我有一个非常简单的问题。试图找出在 rails 3 中路由自定义操作的最简单方法是什么。

假设我有控制器UsersController和动作promote_to_premium

也不

http://localhost:3000/users/#{user_id}/promote_to_premium  

两者都不

http://localhost:3000/users/promote_to_premium/#{user_id}

作品。

我是否应该在 routes.rb 中指定与 new/delete/update/create/ect/.... 不同的每个自定义操作???????

谢谢你。

4

4 回答 4

22

是的,您需要在您的 routes.rb 中指定。
例子:

resources :users do
  member do
    post :promote_to_premium
  end
end

这样你就可以像这样访问路由:

http://localhost:3000/users/#{user_id}/promote_to_premium
于 2012-06-27T14:32:46.250 回答
1

您应该在 routes.rb 中使用它:

match "/users/:id/promote_to_premium" => "users#promote_to_premium"
于 2012-06-27T14:33:49.053 回答
1

您应该在 routes.rb 文件中提及控制器中自定义方法的路由。

您可以使用get""or 或 amatch""=>""指定路由,"post"
当您编写 get "controller/something"something 时,应该是控制器中名称为“something”的操作(方法)。但是在您的情况下,您不能使用get"controller/:id",因为您的控制器中没有":id"方法。因此,您应该match在控制器中controller/:id添加一些内容。'action'因此你需要写

"match users/:id/promote_to_premium"=>  "users#promote_to_premium"

但是如果你正在向数据库中写入一些东西,那么你应该使用' post'。据我所知,我想你可以试试

match 'users/:id/promote_to_premium' => 'users#promote_to_premium', :via => :post 

您可以在以下链接中了解有关路线的更多信息:http: //guides.rubyonrails.org/routing.html

于 2012-06-27T15:35:09.573 回答
0

是的,您需要指定每条路线。resource实际上,您也可以使用命令定义正常路线。

有一个特定的通配符命令允许访问任何操作,但它仅用于调试目的,因为它允许访问您可能不希望访问的操作:

match ':controller(/:action(/:id(.:format)))'
于 2012-06-27T14:32:31.600 回答