2012-04-19 65 views
0

我有一個非常奇怪的情況,看起來控制器操作方法在Rails應用中被忽略。我假設這是不可能的,但我需要有人幫助我看到「樹林」:)這是我擁有的。首先自定義路線:Rails控制器代碼對於自定義路由似乎被忽略

match 'topusers/:skill', :to => 'skills#topusers', :as => :top_users 

然後在我的控制器,我已經減少它歸結爲以下幾點:類SkillsController < ApplicationController的

class SkillsController < ApplicationController 

     .... 

    def top_users 
     @skills = Skill.all 
    end 

     .... 
end 

我的觀點已經減少到以下

<% @skills.each do |skill| %> 
    <%= skill.name %> 
<% end %> 

有了這個,我在@ skills.each行上收到了一個錯誤「未定義的方法」,每個'nil:NilClass「。我知道技能表中有數據,我可以通過導軌控制檯看到。爲了解決問題,我做了一個渲染:text => @ skills.to_yaml,它似乎被忽略。這讓我感到困惑,於是我徹底刪除了top_users方法,但仍然遇到了同樣的錯誤,讓我感到困惑,因爲我認爲rails會因爲沒有使用top_users方法而尖叫。然後我認爲rails可能正在查看不同的控制器,所以我將我的控制器的名稱從SkillsController更改爲SkillsXXXController。這段時間Rails對我說,它無法找到控制器,所以我知道它至少看到了正確的控制器。

那麼,爲什麼我看到這種行爲的任何想法?我的自定義路線看起來正確嗎?有沒有人見過這種行爲?

在此先感謝

克里斯

+0

你在比賽路線中是否缺少下劃線? '技能#topusers'。看起來像你已經在top_users上定義了你的控制器方法。 – botbot 2012-04-19 19:54:18

+0

有趣的是,這是我的問題。我仍然感到驚訝,鐵軌沒有對我說這個方法不存在。謝謝! – 2012-04-19 19:58:34

+0

我相信,如果控制器方法不存在,但有一個匹配top_users的視圖,那麼將不會發生錯誤...雖然不太確定。 – botbot 2012-04-19 21:58:14

回答

1

是否缺少在比賽路線下劃線? '技能#topusers'。看起來像你已經在top_users上定義了你的控制器方法。