我有一個名爲Snippet的模型,其中包含HTML代碼片段以將其推入視圖。模型內部的Ruby元編程
該模型有一個列代碼和其他內容
我想寫這樣的事情在我看來,並獲得內容發回
<%= raw Snippet.PHONE_NUMBER %>
其查找PHONE_NUMBER上的代碼,並返回內容
我有一個名爲Snippet的模型,其中包含HTML代碼片段以將其推入視圖。模型內部的Ruby元編程
該模型有一個列代碼和其他內容
我想寫這樣的事情在我看來,並獲得內容發回
<%= raw Snippet.PHONE_NUMBER %>
其查找PHONE_NUMBER上的代碼,並返回內容
在Snippet
類添加method_missing
類方法如下
# Snippet class
class << self
def method_missing(method, *args, &block)
if(snippet = Snippet.find_by_code(method.to_s))
return snippet.content
else
return super(method, *args, &block)
end
end
end
這應該可以做到。
但是,在相關說明中,我不確定這樣做是否最好,因爲您的代碼依賴於數據庫中的數據。明天,電話號碼記錄被刪除,您的代碼Snippet.PHONE_NUMBER
將中斷。這種方法有很多維護頭痛。
一個更簡潔的方法(這將避免元編程)將有你的觀點做這樣的事情:
<%= snippet :PHONE_NUMBER %>
或
<%= snippet 'PHONE_NUMBER' %>
其中snippet
方法是一個輔助模塊,像這樣的定義:
module SnippetHelper
def snippet(code)
raw Snippet.find_by_code(code.to_s).content
end
end
並提供給所有您的意見與像這樣:
class ApplicationController < ApplicationController::Base
helper :snippet
end
或使用委託。
但它聽起來像是你提供了partials或helpers的另一個實現,或者decent_exposure
和helpers和partials的組合。
非常感謝,代碼很好,作品很受歡迎。感謝您的額外建議,現在我的CMS用戶只是編輯內容,但是當我打開模板時,我需要重新考慮這一點。 – creativetechnologist