2017-09-14 29 views
0

我有一個名爲GlobalHelper的助手。Rails - 使用別名調用模型或助手的方法

其中有幾個常量(例如GLOBAL_URL)和方法(例如self.get_url)。

我試圖使C(#define URL)中的宏的別名或等價物輕鬆訪問我的任何視圖和控制器中的常量和方法。

現在我必須做這樣的:

GlobalHelper.get_url(GlobalHelper::URL_TYPE_PAGE, ["page1"]) 

而且我想擺脫GlobalHelper處處用別名/巨集取得這樣不是代碼:

aliasmethod(aliasconstant, ["page1"]) 

我怎樣才能做到這一點?

+2

你不應該這樣做。最好是明確的。如果你確實需要,那麼使用關注點,並將它們混合到你使用'GlobalHelper'模塊的類中。 – meagar

+0

紅寶石中沒有類C宏,所以文本替換是不可能的。是的,做@meagar說的。你需要閱讀「關注」和「mixins」。 –

+0

@SergioTulentsev在[tag:c]中也沒有宏。有一個宏預處理器,可能涉及構建鏈。前面提到的預處理器可以很容易地在任何文件上運行,包括ruby,而宏是有效的語法。 _以上只是一個更正,不應該被視爲一種方式去通過任何方式:)_ – mudasobwa

回答

0

ruby​​不是c,所以你應該看看在嘗試將這些概念引入到你的項目之前如何編寫想法化的ruby代碼。

因爲我不知道你的get_url方法到底是什麼,我只能給出有限的建議。

一兩件事,可能會導致更漂亮的代碼是用符號代替常量:

GlobalHelper.get_url(:page, ["page1"]) 

時使用的Module代替Class可以包括它和直接調用方法:

include GlobalHelper 
get_url(...) 

這些只是可以做什麼的例子。並不是說這比直接明確調用GlobalHelper更好。完全沒有錯。

+0

謝謝!我會嘗試使用模塊 – tim