Rails:用于不同控制器的表单

Sle*_*vin 9 ruby-on-rails

我正在开发一个带有登陆页面的rails应用程序.在目标网页上,用户可以注册该应用.对于登录,有一个带额外控制器的额外视图.

它看起来像这样:

views/landinpage/index.html --> sign up form
views/login/index.html --> login form
Run Code Online (Sandbox Code Playgroud)

但我只想拥有一个控制器

controllers/login_controller --> create new user from sign up form & check login data
Run Code Online (Sandbox Code Playgroud)

所以我必须在登陆页面视图和login_controller之间建立连接.

这是我的尝试:

<%= form_for @login, :url => { :controller => "login_controller", :action => "create" }, :html => {:method => :post} do |f| %>
Run Code Online (Sandbox Code Playgroud)

但它会引发路由错误:

No route matches {:controller=>"login_controller", :action=>"create"}
Run Code Online (Sandbox Code Playgroud)

我已经在routes.rb中定义了登录资源,但似乎问题出在其他地方?

resources :logins
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Dip*_*hal 13

试试这个

class LoginsController < ApplicationController
   def new
     ...
   end

   def create
     ...
   end
  ...
 end
Run Code Online (Sandbox Code Playgroud)

在你的route.rb文件中写

  match '/login/create' => 'logins#create', :as => :create_login
  or
  resources :logins
Run Code Online (Sandbox Code Playgroud)

在你的控制台 - 写 - rake routes并检查你的路线

然后

<%= form_for @login, :url => create_login_path(@login) do |f| %>
Run Code Online (Sandbox Code Playgroud)

  • 好.在您的创建操作中,您可以定义redirect_to landingpage_path.并定义着陆路线,如 - match'/ landingpage'=>'controller-name#action name',:as =>:landingpage (2认同)

Tig*_*ine 10

我认为你的代码应该是这样的:

<%= form_for @login, :url => { :controller => "login", :action => "create" }, :html => {:method => :post} do |f| %>
Run Code Online (Sandbox Code Playgroud)

现在无法测试,但我相信_controller部分不是必需的.

更新:

我正在使用的另一件事是有效的:

<%= form_for @login, :url => create_login_path(@login), :html => {:method => :post} do |f| %>
Run Code Online (Sandbox Code Playgroud)

您可能必须修复create_login_path零件以匹配应用程序的路径,但这就是我通常定义这些视图的方式.