Ruby on rails 在Rails 3中路由自定义操作
我有一个非常简单的问题。 试图找出在rails 3中路由自定义操作的最简单方法 假设我有controllerRuby on rails 在Rails 3中路由自定义操作,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个非常简单的问题。 试图找出在rails 3中路由自定义操作的最简单方法 假设我有controlleruserscocontroller和actionpromotion\u to\u premium 也不是 都不是 http://localhost:3000/users/promote_to_premium/#{user_id} 工作 我是否应该在routes.rb中指定与new/delete/update/create/ect/…不同的每个自定义操作 谢谢。是的,您需要指定每条路线。实
userscocontroller
和actionpromotion\u to\u premium
也不是
都不是
http://localhost:3000/users/promote_to_premium/#{user_id}
工作
我是否应该在routes.rb中指定与new/delete/update/create/ect/…不同的每个自定义操作
谢谢。是的,您需要指定每条路线。实际上,您也可以使用
resource
命令定义正常路由
有一个特定的通配符命令允许访问任何操作,但它仅用于调试目的,因为它允许访问您可能不希望访问的操作:
match ':controller(/:action(/:id(.:format)))'
是的,您需要在routes.rb中指定。
例如: 通过这种方式,您可以访问以下路径:
http://localhost:3000/users/#{user_id}/promote_to_premium
您应该在routes.rb中使用此选项:
match "/users/:id/promote_to_premium" => "users#promote_to_premium"
对于控制器中的自定义方法,应在routes.rb文件中提及路由 您可以使用
获取“
或匹配“=>”
或发布“
当您编写get
“controller/something”
时,某些内容应该是在控制器中以“something”名称调用的操作(方法)。但是在您的情况下,您不能使用get“controller/:id”
,因为您的控制器中没有“:id”
方法。因此,您应该将控制器/:id
与控制器中的一些操作
相匹配。
因此你需要写作
"match users/:id/promote_to_premium"=> "users#promote_to_premium"
但是如果您正在向数据库中写入某些内容,那么应该使用“post
”。不管我知道什么,我想你可以试试
match 'users/:id/promote_to_premium' => 'users#promote_to_premium', :via => :post
您可以在以下链接中了解有关路线的更多信息:
为什么只用于调试?如果我是对的,在Rails 1.3中这样工作是不安全的,让用户像那样处理任何操作。如果您有一个需要多个参数的操作,或者类似的操作,任何人都可以通过键入controller/actiona作为url来访问该操作,该怎么办?@matzi:好的,控制器应该验证它是否以任何方式获得了正确的数据。当然,它应该这样做,但在默认情况下最好不要保留任何打开状态,试想一下,某个助手函数意外地被误认为是一个有效的操作。第二个不被接受的答案实际上回答了这个问题。
"match users/:id/promote_to_premium"=> "users#promote_to_premium"
match 'users/:id/promote_to_premium' => 'users#promote_to_premium', :via => :post