我正在使用Rails创建基本产品登录页面,用户可以在其中输入他们的电子邮件地址,以便在产品发布时收到通知。 (是的,有服务/宝石等可以为我做这个,但我是编程的新手,并希望自己构建它来学习rails。)
成功提交表单后,我想重定向到自定义'/ thanks'页面,感谢用户对该产品的兴趣(并鼓励他们完成简短的调查。)
目前,成功的提交显示在“/ invites /:id /”,例如“邀请/ 3”,这是我不想要的,因为它公开了已提交的邀请数。我想将所有成功的提交重定向到“/ thanks”页面。
我试图研究“rails自定义网址”,但一直无法找到有效的内容。我能找到的最接近的是Stackoverflow post on how to redirect with custom routes,但并不完全理解推荐的解决方案。我也试过阅读Rails Guide on Routes,但我是新手,并没有看到任何我理解为允许创建自定义网址的内容。
我已将感谢信息显示在“views / invites / show.html.haml”中的成功表单提交中
我的路线文件
resources :invites
root :to => 'invites#new'
我尝试插入routes.rb:
post "/:thanks" => "invites#show", :as => :thanks
但我不知道这是否有用或者我如何告诉控制器重定向到:谢谢
我的控制器(基本上是vanilla rails,此处只包含相关操作):
def show
@invite = Invite.find(params[:id])
show_path = "/thanks"
respond_to do |format|
format.html # show.html.erb
format.json { render json: @invite }
end
end
# GET /invites/new
# GET /invites/new.json
def new
@invite = Invite.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @invite }
end
end
# POST /invites
# POST /invites.json
def create
@invite = Invite.new(params[:invite])
respond_to do |format|
if @invite.save
format.html { redirect_to @invite }
#format.js { render :action => 'create_success' }
format.json { render json: @invite, status: :created, location: @invite }
else
format.html { render action: "new" }
#format.js { render :action => 'create_fail' }
format.json { render json: @invite.errors, status: :unprocessable_entity }
end
end
end
似乎创建用于显示确认的标准URL似乎相对简单。任何有关如何实现这一目标的建议都将受到赞赏。
答案 0 :(得分:3)
我想你想在创建动作后重定向,这是在提交表单时执行的。
只需按以下方式添加redirect_to:
def create
@invite = Invite.new(params[:invite])
if @invite.save
...
redirect_to '/thanks'
else
...
redirect_to new_invite_path # if you want to return to the form submission page on error
end
end
为简洁起见,我省略了一些代码。
在您的路线中添加:
get '/thanks', to: "invites#thanks"
将感谢操作添加到您的邀请控制器:
def thanks
# something here if needed
end
在app / views / invites中创建一个thanks.html.erb页面。
答案 1 :(得分:0)
您可以创建这样的路线:
resources :invites do
collection do
get 'thanks'
end
end
这也将创建一个名为thanks_invites_path
的路径助手。
它将位于invites/thanks
路径上,但如果您希望它位于/thanks
,您可以像Jason所说的那样:
get "/thanks" => "invites#thanks", :as => :thanks
as
部分将生成一个帮助程序来访问该页面:thanks_path
。
您需要在名为thanks
的控制器中执行额外操作,并在其中放置您需要的任何信息,并且您还需要一个名为thanks.html.erb
的其他视图
由于您希望每个人在成功提交后转到该页面,因此在您的创建操作中,您将拥有:
format.html { redirect_to thanks_invites_path}
(或thanks_path
),您选择的是什么,当您为路线命名时,如果可以,可以使用rake routes
进行检查,无论rake routes
说什么,只需在最后添加_path
。
答案 2 :(得分:0)
我会在get "/thanks" => "invites#thanks"
中执行routes.rb
,然后将其添加到您的控制器中:
def thanks
end
然后使用感谢内容添加文件app/views/invites/thanks.html.erb
。