我目前正在重拍craigslist作为基本的rails项目。我在主页上有一个登录链接,带有一个AJAX请求,显示包含登录部分的div。
_login.html.erb
<%= form_for @user, url: { action: "/authenticate" } do |f| %>
<%= f.label :email %>
<%= f.text_field :email %><br>
<%= f.label :password %>
<%= f.text_field :password %>
<%= f.submit "Log In!" %>
<%= flash[:notice] %>
<% end %>
categories_controller.rb 又名我的主页操作方法如下所示:
def index
@user = User.all
@categories = Category.all
end
我收到错误:&#34;没有路由匹配{:action =&gt;&#34; / users_controller / authenticate&#34;,:controller =&gt;&#34; categories&#34; }&#34;
如何在单独的控制器中将表单路由到另一个操作方法? (即users_controller)
答案 0 :(得分:0)
如果您想为任何特定控制器提交表单,任何特定操作并希望传递一些额外参数(使用在控制器中定义的控制器中传递的操作)
例如
<%= form_for @user, :url => {:controller => "users", :action => "authenticate"} do |f| %>
在上面的代码中,表单被提交给该控制器(您传递url)并转到(传递操作)动作。它将默认为当前操作。
答案 1 :(得分:0)
从您的代码中,我们可以按照以下方式修改它,以便通过以下方式消除您所获得的错误:url: {controller: "users", action: "/authenticate" }
或使用命名路径路径,例如:{url: users_path}
。
我们也可以传递url: {controller: "categories", action: "/authenticate", id: "SO", one: "stack" }
或{url: users_path(id:'so')}
等参数。这些参数通过URL发送到控制器方法,我们可以在控制器中使用它们
params[:id]
或params[:one]
。
您可以使用bundle exec rake routes
或rake routes
答案 2 :(得分:0)
<强>助手强>
您最好在轨道上阅读path helpers - 如果设置正确,这些应指向您的正确网址:
#config/routes.rb
resources :users do
collection do
post :authenticate #-> domain.com/users/authenticate
end
end
您遇到的问题是您正在致电{ action: "/authentication" }
- 这根本不是一项行动。您正在尝试拨打网址,但该网站无法正常工作。
您最好使用路径助手,如下所示:
<%= form_for @user, user_authentication_path %>