2016-06-20 14 views
0

私はこのようなモデルでは部分的にJBuilderレンダリングしようとしています:モデル内にJbuidlerパーシャルをレンダリングする方法は?

class Reminder < ActiveRecord::Base 
    ... 
    def fcm_format 
    Jbuilder.new do |json| 
     json.partial! 'api/v1/gigs/summary', gig: remindable 
    end 
    end 
end 

をしかし、これは私に、次のエラーが発生します。

TypeError: {:gig=>#} is not a symbol nor a string

モデルやデコレータの内部を部分的にレンダリングする方法はありますか?

答えて

4

Jbuilderインスタンスはpartial!に応答しません。 partial!JbuilderTemplateに含まれています。 JbuilderTemplateのコンストラクタがJbuilder.newのsuperを呼び出す前にコンテキストを探しています。

解決策は、コンテキストを追加することです。問題は、JbuilderTemplateの中で、コンテキストがメソッドrenderを呼び出し、モデルでレンダリングする方法が組み込まれていないことです。したがって、ActionController::Baseオブジェクトを使用してコンテキストをスタブする必要があります。

class Reminder < ActiveRecord::Base 

    # Returns a builder 
    def fcm_format 
    context = ActionController::Base.new.view_context 
    JbuilderTemplate.new(context) do |json| 
     json.partial! 'api/v1/gigs/summary', gig: remindable 
    end 
    end 

    # Calls builder.target! to render the json 
    def as_json 
    fcm_format.target! 
    end 

    # Calls builder.attributes to return a hash representation of the json 
    def as_hash 
    fcm_format.attributes! 
    end 
end 
+0

ありがとうジミー。それは正常に働いた。 – pickhunter

関連する問題