【发布时间】:2013-02-27 20:01:54
【问题描述】:
我知道我无法在 HTML 重定向上发布,但我的情况要求我在验证用户身份后重定向以创建操作。我想知道如何绕过这个限制:
特别是,我希望允许用户在不使用 Omniauth 登录的情况下填写帖子。我使用 AJAX 调用将帖子保存到 session[:post] 。然后,用户可以使用omniauth登录并持久化帖子。
我有一个带有创建操作的 PostsController,用于处理初始 ajax 调用,并在验证用户后处理 html 请求:
def create
@post = Post.new(params[:post])
respond_to do |format|
format.html{
if @post.save
redirect_to @post, notice: 'Post was successfully created.'
else
render action: "new"
end
}
format.json {
if session[:post] = @post
render json: @post, status: :created, location: @post
else
render json: @post.errors, status: :unprocessable_entity
end
}
end
end
end
然后,在我处理来自 Facebook 的回调的控制器中,我有:
class ServicesController < ApplicationController
def create
... authentication logic here ...
sign_in(:user, service.user)
redirect_to :controller => "posts", :action =>"create"
end
method_alias: :facebook, :create
但是,这不起作用,因为我无法重定向到“创建”操作。我怎样才能完成这项任务?
【问题讨论】:
-
我认为是
render action => :create,但我正在努力寻找它的文档。 -
@Cort3z :如果你能找到我将不胜感激。我也去找找。
-
您应该创建一个答案而不是编辑您的问题,这对于未来的访问者来说会更具可读性。查看以下 url,了解如何添加
persist路由而不会出现错误(在您的情况下使用收集路由):guides.rubyonrails.org/routing.html#adding-more-restful-actions -
@Baldrick:非常感谢关于收集路线的提示。我将修改我的代码并将其添加为答案。
-
不客气。现在您可以接受自己的答案,因此这是第一个可见的答案。
标签: ruby-on-rails redirect omniauth