如何指定重定向链接使用post方法?

时间:2015-08-13 15:50:20

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

在视图中,我有以下格式的链接:

doctrine:
    orm:
        auto_mapping: true
        metadata_cache_driver: apc
        result_cache_driver:
            type: redis
            host: localhost
            instance_class: Redis

这使用一种控制器方法,该方法首先调用设置<%= link_to "User", move_on_path(organization: organization, url: edit_profile_path(@user)) %> 值的方法,然后转到指定的session

url

这样可行,但现在我的def move_on @organization = Organization.find_by(params[:organization]) set_session(@organization) redirect_to params[:url] end 方法为url,而不是post。当它是get方法时,我不知道链接的语法。我有以下语法,但需要postpost。如何在下面的语法中指定这个(或者没有办法改变edit_profile_path)?

def move_on

更新:使用@Chuck Callebs回答下面我已将控制器方法更改为:

<%= link_to "User", move_on_path(organization: organization, url: edit_profile_path(@user)) %>

这是正确的吗?我编造def move_on @organization = Organization.find_by(params[:organization]) set_session(@organization) if params[:_url] == 'users#edit' post_to params[:url] else redirect_to params[:url] end 来解释我希望它做什么,但是将它发布到post_to的正确代码是什么?

我不认为这是一个重复的帖子,因为它更多的是在此用例中查找解决方案,然后是url请求是否可行。

2 个答案:

答案 0 :(得分:2)

不幸的是,我不相信有一种方法可以使用带有POST的redirect_to。

这是因为redirect_to只是向浏览器发送HTTP 30x重定向标头。然后,浏览器在目标URL上发起GET请求。我看到你有2个选项:

  • 为此特定重定向创建一个新的控制器方法(一个执行类似任务的GET请求)

  • 您可以在现有控制器方法中使用request.get?方法来处理两个请求之间的任何差异。

<强>更新

我认为你应该将POST请求中的功能包装到服务对象中,然后直接在move_on方法中调用它。那是我走的路。话虽如此,如果您需要执行上述方法,请参阅此StackOverflow答案:

https://stackoverflow.com/a/10614765/14877

如果你最终走的那条路线,你应该编写一个帮助方法(甚至可以称之为post_to :))来处理你的细节。

答案 1 :(得分:-1)

关注link_to文档http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to

我认为您只需要添加method选项:

<%= link_to "User", move_on_path(organization: organization, url: edit_profile_path(organization.id), method: :post) %>