14

我正在开发一个带有登录页面的 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

所以我必须在登录页面视图和 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

有任何想法吗?

4

4 回答 4

18

试试这个

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| %>
于 2012-10-23T10:53:37.437 回答
12

我认为您的代码应如下所示:

<%= 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部分以匹配您的应用程序的路由,但这就是我通常定义这些视图的方式。

于 2012-10-23T10:44:45.023 回答
0

可以看到html表单动作部分,可以看!

config/routes

resources :posts

namespace :admin do
  resources :posts
end
于 2012-10-31T09:37:16.930 回答
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| %>>
于 2014-07-07T09:43:21.170 回答