私は、スニペットと呼ばれるモデルを持っています。このモデルには、HTMLのスニペットが含まれています。モデル内のRubyメタプログラミング
モデルは、列CODEと
は私が私の見解では、このようなものを書いて、コンテンツを取得したいのですが、別のコンテンツを持っているバック
<%= raw Snippet.PHONE_NUMBER %>
CODEにPHONE_NUMBERを検索し、コンテンツを返します
私は、スニペットと呼ばれるモデルを持っています。このモデルには、HTMLのスニペットが含まれています。モデル内のRubyメタプログラミング
モデルは、列CODEと
は私が私の見解では、このようなものを書いて、コンテンツを取得したいのですが、別のコンテンツを持っているバック
<%= raw Snippet.PHONE_NUMBER %>
CODEにPHONE_NUMBERを検索し、コンテンツを返します
# 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
クラスの
method_missing
クラスメソッドを追加します。
これはトリックを行う必要があります。
しかし、関連するノートでは、コードをデータベースのデータに依存しているため、これを実行するのが最善の方法であるかどうかはわかりません。明日、電話番号のレコードが削除され、コードSnippet.PHONE_NUMBER
が壊れます。このアプローチには、多くのメンテナンスの頭痛があります。 (メタプログラミングを避けるだろう)
クリーナーのアプローチは、あなたのビューを持つことになり、このような何か:
<%= snippet :PHONE_NUMBER %>
または
snippet
方法は、このようなヘルパーモジュールで定義されて
<%= snippet 'PHONE_NUMBER' %>
を:
module SnippetHelper
def snippet(code)
raw Snippet.find_by_code(code.to_s).content
end
end
class ApplicationController < ApplicationController::Base
helper :snippet
end
または代理人を使用してください。
しかし、別の部分実装、ヘルパー、またはdecent_exposure
とヘルパーと部分的な組み合わせの組み合わせを提供しているようです。
ありがとう、コードの素敵なビット、作品grest。追加のアドバイスをありがとう、今私のCMSユーザーはコンテンツを編集するだけですが、私がテンプレートを開くときには、これを再考する必要があります。 – creativetechnologist