我正在开发一个带有登陆页面的rails应用程序。在目标网页上,用户可以注册该应用。对于登录,有一个带额外控制器的额外视图。
看起来像这样:
views/landinpage/index.html --> sign up form
views/login/index.html --> login form
但我只想拥有一个控制器
controllers/login_controller --> create new user from sign up form & check login data
所以我必须在landingpage视图和login_controller之间建立连接。
这是我的尝试:
<%= form_for @login, :url => { :controller => "login_controller", :action => "create" }, :html => {:method => :post} do |f| %>
但它会引发路由错误:
No route matches {:controller=>"login_controller", :action=>"create"}
我已经在routes.rb中定义了登录资源,但似乎问题出在其他地方了?
resources :logins
任何想法?
答案 0 :(得分:12)
试试这个
class LoginsController < ApplicationController
def new
...
end
def create
...
end
...
end
你的route.rb文件中的写
match '/login/create' => 'logins#create', :as => :create_login
or
resources :logins
在您的控制台中 - 写 - rake routes
并检查您的路线
然后
<%= form_for @login, :url => create_login_path(@login) do |f| %>
答案 1 :(得分:10)
我认为您的代码应如下所示:
<%= form_for @login, :url => { :controller => "login", :action => "create" }, :html => {:method => :post} do |f| %>
现在无法测试,但我认为_controller部分不是必需的。
<强>更新强>
我正在使用的另一件事是有效的:
<%= form_for @login, :url => create_login_path(@login), :html => {:method => :post} do |f| %>
您可能需要修复create_login_path
部分以匹配您的应用程序的路线,但这就是我通常定义这些视图的方式。
答案 2 :(得分:0)
你可以看到html表单动作部分,你可以看到!
您的config/routes
已
resources :posts
namespace :admin do
resources :posts
end
答案 3 :(得分:0)
试试这个
class LoginsController < ApplicationController
def new
...
end
def create
...
end
...
end
routes.rb
文件中的
resources :logins do
collection do
post :create
end
end
并在 views
<%= form_for @login, :url => create_login_path(@login) do |f| %>>