0

Rails ページにメタデータを追加する際に、Facebook の Open Graph プロトコルを試しました。今やりたいことは、コードを重複させたり DRY にしたりしないようにすることです--- コントローラー ページごとに 1 つのメタデータ ヘッダーを配置する代わりに、継承される "MyMetaBuilder" という基本クラスを作成したいと思います。しかし、どこでどのようにコーディングを開始すればよいかわかりません... コンテキストに応じてメタデータのプロパティ値を動的に生成する必要があると誰かが提案しました。たとえば、PlayMetaBuilder、CookMetaBuilder など...

また、コントローラーのアクションを単体テストする場合、その存在を確認するにはどうすればよいですか?

どうもありがとう。

4

2 に答える 2

0

私が Scoutzie のために行ったことは、すべてのメタデータを head パーシャルに入れ、if/else ケースを次のようにしました。

%meta{:type => 'Author', :content => "Kirill Zubovsky"}
%meta{'property' => "og:site_name", :content=>"Scoutzie"}
-if @designer
 ...
-elsif @design
 ...
-else
 ...

このようにして、読み込まれる変数に応じて、それがどのページであるかがわかり、それによってどのメタデータを含めるかがわかります。これは洗練されたソリューションではないかもしれませんが、機能し、非常にシンプルです。

于 2013-03-19T00:11:33.477 に答える
0

1 つはタグを定義することであり、もう 1 つはタグをレンダリングすることです。私は次のことをします:

  • コントローラー mixin (acts_as_metatagable のようなもの) を作成し、各コントローラーに特定のフィールドを定義します (残りのフィールドにはデフォルトを設定します)。これらはクラス (またはインスタンス) 変数に割り当てられ、この方法でレンダリング ステップでアクセスできるようになります)。

  • すべてのタグを取得して html に変換するヘルパー関数を作成します。次に、このヘルパー関数がレイアウトで呼び出され、ドキュメントのヘッドにレンダリングされます。

したがって、これは少し次のようになります:終わり

# lib/acts_as_metatagable.rb
module ActsAsMetatagable
  module MetatagableMethods
    #option 2.2: insert og_tags method here and declare it as helper method
    def og_metatags
      @og_tags.map do |k, v|
        # render meta tags here according to its spec
      end
    end
    def self.included(base)
       base.helper_method :og_tags
    end
  end

  def acts_as_metagabable(*args)
    include MetatagableMethods
    # insert dirty work here
  end
end

# option 1.1: include it in an initializer
# initializers/acts_as_metatagable.rb
ActiveController::Base.send :include, ActsAsMetatagable


# option 2.1: insert og_metatags helper method in an helper
module ApplicationHelper
  def og_metatags
    @og_tags.map do |k, v|
      # render meta tags here according to its spec
    end
  end
end
于 2012-10-09T12:12:23.253 に答える