2015-09-24 3 views
21

このバージョンは正式にリリースされていませんが、今日はrc3をチェックしていましたが、シリアライザ内でRailsのURLヘルパーを使用できなくなったことに気付きました。バージョン0.8.xでは、私は以下を行うことができました:ActiveModelSerializer 0.10.0のUrlヘルパーですか?

class BrandSerializer < BaseSerializer 
    attributes :id, :name, :slug, :state 
    attributes :_links 

    def _links 
    { 
     self: api_v1_company_brand_path(object.company_id, object.id), 
     company: api_v1_company_path(object.company_id), 
     products: api_v1_company_brand_products_path(object.company_id, object.id) 
    } 
    end 

end 

しかしこれは新しいバージョンではありません。シリアライザでリンクを維持できるように、これを解決する最良の方法は何ですか?

編集: 今のところ私は次のことをしていますが、もっと慣れ親しんだ方法があれば聞いてみるのが大好きです。

(あなたが行っていたとして)は除外されていたライブラリが最も確かに(idiomacyの観点から、宝石自体の見直しの外側)の最短ルートになるなど、
class BaseSerializer < ActiveModel::Serializer 
    include Rails.application.routes.url_helpers 
+0

私はあなたがそれに最もよく答えたと思います –

答えて

5

あなたにこれを追加した場合ApplicationControllerあるいはおそらく応答を生成するコントローラへ:

あなたはその後、本当にURLヘルパー(または任意のビューのメソッドにアクセスするためにシリアライザに view_contextを使用することができます

serialization_scope :view_context

)。

例:view_context.api_v1_company_brand_path(object.company_id, object.id)

私はこれはおそらく、シリアライザクラスに...これらすべてのURLヘルパーなどを含めたよりもきれいだと思いました。

関連する問題