基本上我想使用PUT
方法重定向到redirect_to
控制器操作,但它只想使用GET
动词。有没有办法在redirect_to
?
路线定义为佣金路线
resume_user PUT /users/:id/resume(.:format) users#resume
并且我使用了以下所有结果No route matches [GET] "/users/5/resume"
我可能错了,在这种情况下,有什么建议吗? 谢谢 帕特里克
答案 0 :(得分:1)
standard不允许这样做。具有状态307的重定向禁止浏览器在遵循重定向时更改请求方法,但是没有用于请求特定方法的机制。
答案 1 :(得分:0)
这是一个古老的问题,但是要找到答案并不容易,所以... 如果您来自获取或发布请求,则可以更改添加方法的状态:303
redirect_to resume_user_path(@user), status: 303
答案 2 :(得分:0)
我有和海报一样的场景,并通过以下方式解决了它。
[application_helper.rb]
def parse_from_params(params, anc = nil)
@tags || = []
params.each do |row|
key = if anc
f, b = anc.split
f + "\[#{row.first} \]" + b.to_s
else
row.first.to_s
end
if row.last.is_a?(Hash)
parse_from_params(row.last, key)
else
@tags << hidden_field_tag(key.delete(' '), row.last)
end
end
@tags.reduce(:+)
end
[application_controller.rb]
def redirect_keeped_params(url, **options)
@url = url
@params = options[:params]
@method = options[:method]
render_text = <<-EOS
<%= form_tag @url, method: @method, id: "redirect_form" do %>
<%= parse_from_params(@params) %>
<%= javascript_tag 'document.getElementById("redirect_form").submit()' %>
<% end %>
EOS
render inline: render_text
end
使用示例...
[posts_controller.rb]
def redirect_to_put_preparation
post = Post.find(params[:id])
params = {}
params[:post] = {title: params[:title], body: params[:body]}
# or params = post_params
redirect_keeped_params(update_post_path(id: post.id), params: params, method: :put)
end
def update_post
post = Post.find(params[:id])
post.update(post_params)
flash[:notice] = "success"
redirect_to root_path
end
def post_params
params.require(:post).permit(:title, :body)
end
答案 3 :(得分:-2)
尝试
redirect_to resume_user_url(@user), method: :put
我已尝试在链接上使用method: :post
,但我还没有尝试使用redirect_to。