2016-02-19 21 views
1

因此,我正在通過一本關於Rails開發的書,現在我遇到了一個問題。我有一個「用戶」控制器有幾個動作。我在其中定義的其中一個操作是「follow」。但是,每當我嘗試使用rails helper鏈接到我的視圖時,它告訴我沒有定義該路由。這裏是我的控制器的樣子:Rails路由問題,沒有路由匹配我在控制器中定義的操作

class UsersController < ApplicationController 
def follow 
    @user = User.find(params[:id]) 
    if current_user.follow!(@user) 
     redirect_to @user, notice: "Follow successful!" 
    else 
     redirect_to @user, alert: "Error following." 
    end 
end 

我試過用兩種方法鏈接到這個。這是第一個:

<%= link_to "Follow", {action: 'follow'}, class: 'btn btn-default' %> 

此產生錯誤: 「否路線匹配{:行動=>」 跟隨 「:控制器=> 」用戶「,:ID => 」2「}」

這裏是第二方式:

<%= link_to "Follow", follow_user_path(@user), class: 'btn btn-default' %> 

這將產生消息:「未定義的方法`follow_user_path」爲#<#:0x007f8fb76bd570>」

甚至當我運行耙路線,路徑顯示不出來那裏,e儘管我已經在我的routes.rb文件中定義了

resources :users 

我現在處於完全喪失狀態。我究竟做錯了什麼?

回答

2

您尚未定義路線。 resources :users將只定義RESTful路由,不包括follow。爲了彌補這一點,你可以寫這樣的:

resources :users do 
    member do 
    get :follow 
    end 
end 

它會產生這樣的URL:

/users/USER_ID/follow 

然後從視圖中,您可以鏈接到它是這樣的:

<%= link_to "Follow", follow_user_path(USER_ID), class: 'btn btn-default' %> 

務必用實際的用戶ID替換USER_ID

+0

做到了。我的印象是,如果你在你的控制器中定義了一個動作,就會爲其生成路由。謝謝您的幫助。 –

-1

從我的理解,貌似有沒有後續的路線,讓你的routes.rb裏,你需要把這樣的事情: 得到「/遵循」,以「用戶#遵循」

相關問題