在视图中,我有以下格式的链接:
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
方法时,我不知道链接的语法。我有以下语法,但需要post
到post
。如何在下面的语法中指定这个(或者没有办法改变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
请求是否可行。
答案 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) %>