Ruby on rails 在表单中注册,并使用表单标签在主页上注册表单

Ruby on rails 在表单中注册,并使用表单标签在主页上注册表单,ruby-on-rails,forms,Ruby On Rails,Forms,这是一个基本和常见的问题,我想一劳永逸地解决它。试了好几天 我有两个表格,在主页上,谁的控制器是静态的页面控制器。 一张表格用于登录,另一张用于注册 sign_in表单使用会话控制器使用创建操作 注册表单使用用户控制器使用创建操作 当使用form_标记时,如何指定它应该转到哪个控制器以及应该采取什么操作 以下代码用于注册页面: ` 我知道有像表单标签{:controller=>user,:action=>create},:method=>post,:class=>nifty\u表单这样的选项,但

这是一个基本和常见的问题,我想一劳永逸地解决它。试了好几天

我有两个表格,在主页上,谁的控制器是静态的页面控制器。 一张表格用于登录,另一张用于注册

sign_in表单使用会话控制器使用创建操作

注册表单使用用户控制器使用创建操作

当使用form_标记时,如何指定它应该转到哪个控制器以及应该采取什么操作

以下代码用于注册页面: `


我知道有像表单标签{:controller=>user,:action=>create},:method=>post,:class=>nifty\u表单这样的选项,但似乎都不起作用。登录时也是如此。请帮忙

当页面呈现时,HTML表单将有一个动作。您可以使用javascript更改表单的操作,具体取决于他们是注册还是登录。

我认为这里有一个小小的误解,或者我误解了您的问题。您不能在form_字段中指定目标控制器和操作,至少不能直接指定。您唯一的责任是:

为可以通过提供控制器和操作生成的表单设置正确的URL,但情况不同 为Rails自动执行此操作的表单设置正确的HTTP方法,如果没有,则默认为POST 然后在routes.rb中完成路径和控制器/操作之间的映射。例如:

resource :session, :only => [:new, :create, :destroy]
resources :users
这将生成以下路径=>控制器/操作映射:

GET    /session/new  =>  sessions#new        (new_session_path)
POST   /session      =>  sessions#create     (session_path)
DELETE /session      =>  sessions#destroy

GET    /users/new  =>  users#new             (new_user_path)
POST   /users      =>  users#create          (users_path)
... etc ...
因此,如果需要将表单提交到SessionCreate,URL必须是session_path,方法必须是POST。这同样适用于用户的路径。 以下代码用于登录表单:

<%= form_tag session_path do %>
  <!-- fields -->
<% end %>

由于您的表单看起来正常,因此问题的原因可能是routes.rb。运行rake routes以检查路由指向哪个控制器/操作。

什么是“无”似乎有效?你的意思是它对你来说太复杂了吗?还是你有错误?因为它在官方指南中说form_标记中的params的散列版本会生成一个form标记。对不起,我应该澄清一下。无创建新用户。我得到的最好结果是它路由到注册页,或者得到一个路由错误,说没有路由匹配[POST]/assetsI还尝试了以下方法:POST do%>表单位于主页中。当我提交表单时,它会将我重定向到注册页面,其中包含所有错误消息,例如名称字段为空,尽管我正确填写了原始表单。一定是有误解。有两种形式,因此不需要javascript。问题是需要考虑两个独立的控制器。对于登录,Form1应使用会话控制器。对于注册,Form2应该使用用户控制器。问题是如何具体说明表单应该以哪个控制器和模型为目标。请注意,表单位于主页中,其默认控制器为静态页面控制器。我正在注册两个不同的模型。病人和医生。我有一个下拉列表,人们可以在其中选择,但我还没有弄清楚如何通过它作为路线的指标,选择它应该去哪个控制器。但这是另一个问题。在这里,我试图解决这个问题,没有选择,只是想签署使用表单_标签的人。目前,我正在尝试使用此代码。用户,:action=>/users},:method=>post,:class=>nifty\u form do%>它给了我一个路由错误。什么是操作和什么方法?在这里,您试图通过给表单提交URL一个控制器和一个操作名称来生成表单提交URL。但是这里的action参数应该是目标Rails操作,而不是进入action HTML参数的值,因为它们具有相同的名称,所以难怪看起来很混乱。。。。因此,如果您在UsersControllercreate方法中创建用户,那么您的代码应该如下:{:controller=>users,:action=>create},或者只是users\u path。如果你的路线设置正确,它们都应该生成类似于以下内容的HTML代码:…如果你仍然被卡住,请将你的routes.rb和你表格的完整代码添加到你的问题中,因为我在黑暗中刺伤你。。。
<%= form_tag session_path do %>
  <!-- fields -->
<% end %>
<%= form_for @new_user do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>
  <!-- etc -->
<% end %>