如何在轨道中正确渲染部分4

时间:2014-07-16 01:38:52

标签: ruby-on-rails ruby ajax ruby-on-rails-3 ruby-on-rails-4

我目前正在重拍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)

3 个答案:

答案 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 routesrake 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 %>