【问题标题】:How to correctly render partial in rails 4如何在rails 4中正确渲染部分
【发布时间】:2014-07-16 01:38:52
【问题描述】:

我目前正在重新制作 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

我收到错误消息:“没有路由匹配 {:action=>"/users_controller/authenticate", :controller=>"categories"}"

如何将我的表单路由到单独控制器中的另一个操作方法? (即 users_controller)

【问题讨论】:

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


    【解决方案1】:

    帮助者

    最好阅读 rails path helpers - 如果设置正确,这些应该指向正确的 URL:

    #config/routes.rb
    resources :users do
       collection do
          post :authenticate #-> domain.com/users/authenticate
       end
    end
    

    您遇到的问题是您正在调用{ action: "/authentication" } - 这基本上不是一个动作。您正在尝试调用 url,但它不起作用。

    您最好按如下方式使用路径助手:

    <%= form_for @user, user_authentication_path %>
    

    【讨论】:

      【解决方案2】:

      如果您想为任何特定控制器、任何特定操作提交表单并想要传递一些额外的参数(使用在控制器中定义的操作,您传递给控制器​​)​​

      例如

      <%= form_for @user, :url => {:controller => "users", :action => "authenticate"} do |f| %>
      

      在上面的代码中,表单被提交给那个控制器(你传递 url)并转到那个(你传递动作)动作。它将默认为当前操作。

      【讨论】:

        【解决方案3】:

        从您的代码中,我们可以将其修改如下,以消除您遇到的错误: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 查看您的路线

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-07
          • 2016-08-30
          • 1970-01-01
          • 2016-12-10
          • 2014-08-25
          • 2016-11-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多