2014-07-16 46 views
0

我目前正在將craigslist作爲基本導軌項目進行重製。我有一個AJAX請求在主頁上的登錄鏈接,顯示包含登錄部分的div。如何在導軌中正確渲染部分4

_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」}「

How do我將表單路由到另一個控制器中的另一個操作方法? (即users_controller)

回答

0

你的路由助手

你最好在軌道上path helpers讀了 - 如果設置正確,這些都應該指向正確的URL爲你:

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

您遇到的問題是您打電話給{ action: "/authentication" } - 這根本不是一個動作。您正試圖撥打網址,這不起作用。

你會使用的路徑幫手如下最好:

<%= form_for @user, user_authentication_path %> 
0

如果你想提交表單對於任何特定的控制器,任何具體的行動,並希望通過一些額外的參數(使用動作,在控制器定義您傳遞控制器)

例如

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

在上述代碼的形式被提交給該控制器(您傳遞URL)和該後藤(你傳遞動作)動作。它將默認採用當前操作。

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