2009-10-28 64 views
1

我有一個活動記錄類的方法,它爲消息傳遞系統呈現ERB模板。簡化的代碼如下所示:在自定義呈現的ERB模板中使用rails命名的路線

ERB.new(template).result(binding) 

其中binding是當前綁定的ActiveRecord模型對象和template是從文件系統中讀取ERB模板文件。

我想在模板中使用一些命名路線,但一直沒能進行命名路由可用。

我見過的帖子遍佈陳述,包括/需要以下到當前的ActiveRecord模型的各種組合(或最好作爲一個單身):

include ActionView::Helpers::TagHelper 
include ActionView::Helpers::AssetTagHelper 
include ActionController::UrlWriter 
require 'action_controller/routing' 
include ActionController::Routing 
include ActionController::Routing::Routes 
include ActionController::Routing::NamedRoutes 

一些錯誤的,我認爲是不正確的...其他人我看不到任何好處,因爲路線仍然不起作用。有人有想法嗎?

回答

0

試試「包括的ApplicationController」

+0

ApplicationController是一個類,所以它不能被包含,這是問題中的一些我的初始語句問題的一部分。 – johnml 2009-10-29 14:18:19

0

我覺得你這個接近走錯了路。 MVC是關於將視圖和控制器分開的模型。您試圖讓您的模型訪問視圖,這不應該在Rails中完成。

那種乞討的問題,爲什麼?除非您打算將渲染模板存儲在您的模型中,否則您將以錯誤的方式進行操作。即使那樣,也有更好的方法來做到這一點。

諸如呼叫來呈現:在創建/更新時間部分在控制器中。

包括所有這些額外的類都會讓你的模型停滯不前。

+0

你描述的情況並不完全是我們正在做的。確實,我們可以在模型和渲染之間將它分解爲稍微不同的設置,其中有一些控制器類型的類,但目前看起來並不需要。 我們正在做的是真正給應用程序和rails視圖方法的自定義視圖/渲染器訪問。 此外,只有在調用包含'ERB.new'的方法時,方法才需要作爲一個整體包含在模型中。這通常在後臺處理中完成,而不是在每個Web請求的中間。 – johnml 2009-10-29 14:28:43

1

我得到了所有命名路由和標籤助手到結合使用:

class << self 
    include LegacyUrlsHelper #a proprietary module 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::AssetTagHelper 
    include ActionView::Helpers::UrlHelper 
    include ActionController::UrlWriter 
end 

唯一的問題可能設置default_url_options [:主機],我還沒有測試。

0

你真的只需要:

 
include ActionView::Helpers::UrlHelper 
include ActionController::UrlWriter 

您還需要設置default_url_options[:host]如果您嘗試使用任何_url方法或url_for而不僅僅是_path

相關問題