2014-05-20 152 views
0

我對鐵軌幫助範圍感到困惑。我對鐵軌範圍感到困惑

我PagesHelper

module PagesHelper 
    def testpage 
    "testpagehelper" 
    end 
end 

定義的testpage方法,但爲什麼我可以在視圖/用戶/ index.html.erb使用testpage方法

<h1><%= testpage %> </h1> 

我想只有在使用的testpage視圖/頁/ index.html.erb?

我認爲幫手方法範圍太廣泛。

如果我在UsersHelper中定義了相同的方法,則會出現問題。

module UsersHelper 
    def testpage 
    "testuserhelper" 
    end 
end 

在兩個testpage的幫手,但resutl是視圖/頁/ index.html,然後查看/用戶/ index.html的所有在UsersHelper使用「testpage」,爲什麼?

回答

0

不同的幫手模塊只是幫助組織你的方法。您可以在非相關視圖中使用PageHelper,但是您應該如何?這取決於程序員的決定。

+0

但是,如果在兩個不同的助手中有兩個相同名稱的方法會出現問題,哪一個是視圖可以看到? – wcc526

+0

方法名可能會碰撞 – wcc526

1

新的Rails應用程序在ApplicationController中使用helper :all - 這意味着所有助手都加載到所有繼承自ApplicationController的控制器中。我同意這個範圍太廣泛了。所以你應該把它改成helper :application,然後讓每個控制器都只用它自己的幫助器。請注意,每個控制器都會自動引入自動同名的幫助程序,因此,例如,您無需在UsersController中包含helper :user

+0

對不起,我的問題是幫助範圍是所有視圖,甚至是無關的視圖。 – wcc526

+0

我明白了,那也是我上面提到的問題。該控制器對於拉入助手而言是不可重複的,然後可以將該助手用於該請求的視圖。所以如果你沒有爲每個請求加載所有的助手,那麼你不會在每個視圖中獲得所有的助手方法。我發現這個SO帖子說同樣的事情:http://stackoverflow.com/questions/1179865/why-are-all-rails-helpers-available-to-all-views-all-the-time-is-there -a-way-t - 但顯然這是Rails> = 3.1中的設置。 – pdobb

+0

非常感謝你!我認爲DHH認爲如果幫助者對所有視圖都可用,那麼它更方便,事實上,如果與幫助者的DRY比較,該方法的碰撞不是大問題。 – wcc526