轨在一个视图中的多个表单
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轨在一个视图中的多个表单相关的知识,希望对你有一定的参考价值。
我有 index
显示两种形式的方法 Sign in
和 Sign up
这意味着用户可以在同一个地方创建一个账户和登录。
所以我有 users controller
与 index
的方法,显示一个带有 Sign in
和 Sign up
双主格 _signin.html.erb
和 _signup.html.erb
在 index.html.erb
.
任何想法,我怎么能处理 new
和 create
方法从 users
和 sessions
控制器(可能我可以忽略新方法)?
只要每一个表单都是用正确的模型对象或正确的值来渲染的 :url
选项,每个表单都应该发送预期的请求(假设你的表单是用 form_for
).
例如,你的签到表应该以这样的方式开始:。
<%= form_for :session, :url => sessions_path %>
#...
<% end %>
只要是 POST
请求(表单提交的默认值)被发送到 "集合 "资源(即 /sessions
),它将把请求路由到 create
在你 SessionsController
或任何你命名的控制器。
对于注册,你可能有这样的东西。
<%= form_for @user do |f| %>
# ...
<% end %>
The @user
模型对象将假定该请求应转到 /users
. 这将再次调用你的 create
在你 UsersController
.
当然,这一切也是假设你的 config/routes.rb
文件只是用类似这样的东西来声明每个资源。
resources :users
resources :sessions, :only => [:create, :destroy]
你通常会把每个表格放在单独的视图中,比如说:
match 'sign_in', :to => 'sessions#new'
match 'sign_up', :to => 'users#new'
但是,如果你只想把这些表格显示在一个 index.html.erb
视图,那么这些路由就不再需要了。
<%= form_for :signin,:url=>{:controller=>"yourcontroller",:action=>"signin"},:html=>{:id=>"signin_form"} do |f|%>
...
<%end%>
<%= form_for :signup,:url=>{:controller=>"yourcontroller",:action=>"signup"},:html=>{:id=>"signup_form"} do |f|%>
...
<%end%>
我发现的一个简单的变通方法是,如果两个表单至少有一个唯一命名的参数,那么你可以简单地将POST请求路由到一个动作。然后在动作中检查哪个参数存在并执行相应的代码。最终你的控制器中基本上是一个动作中有两个动作。
def create
if params[:username] and !params[:name]
# You know that the user pressed submit on whichever form
# has a field that fills params[:username].
# So do the action with that form's parameters here
# i.e, login an existing user
respond_to do |format|
format.html {redirect_to '/home', notice: "Login successful"}
end
elsif params[:name] and !params[:username]
# You know that the user pressed submit on whichever form
# has a field that fills params[:username].
# So do the action with that form's parameters here
# i.e, create a new user
respond_to do |format|
format.html {redirect_to '/onboard', notice: "Thanks for signing up"}
end
end
end
只要确保在你的路由.rb中配置好,当POST请求来自两个表单所在的页面时,它将直接指向这个控制器中的这个动作。
希望这能帮到你
以上是关于轨在一个视图中的多个表单的主要内容,如果未能解决你的问题,请参考以下文章