虽然它通常违反我们的设计原则,但我们需要让控制器对GET请求执行它的#create
操作(它是涉及外部服务的一系列重定向的工作流的一部分)。有人知道这样做的目的是什么吗?我真的不想走出Rails路由提供的资源丰富的路由框架。我们不需要通常会响应该GET请求的#index
操作。
我发现(令人惊讶的是)这是有效的,但我不知道它是否有意,或者我们是否正在利用Rails中的一个错误并在以后发生破坏的风险:
resources :agreements, :except => [:index, :create] do
get :create, :on => :collection
end
如果get :create
是get :something
,我们就有了像
Helper: something_agreement_path
Request: GET /agreements/:agreement_id/something
Action: agreements#something
但是Rails实际上产生了我们想要的东西:
Helper: agreements_path
Request: GET /agreements
Action: agreements#create
错误或功能?
答案 0 :(得分:1)
我知道这可能不适用于最新的路由代码,但此链接有大量有关Rails路由的信息。在2.3节中,它介绍了如何构建RESTful路由。
Rails Routing from the Inside Out
如果我想通过我在那里简要阅读的内容来猜测。手动将默认REST操作分配给特定路由。因此,当您将创建操作更改为使用GET时,它会在创建新操作之前创建某种记录(路由的哈希)。
因此,为了回答您的问题,我认为此行为是基于Rails的路由代码的内部工作原理。我认为这种情况总有可能在未来某个时候发生变化。