我试图在这样的模型中渲染jbuilder部分:
class Reminder < ActiveRecord::Base
...
def fcm_format
Jbuilder.new do |json|
json.partial! 'api/v1/gigs/summary', gig: remindable
end
end
end
但是这给了我以下错误。
TypeError:{:gig =&gt;#}不是符号,也不是字符串
有没有办法在模型或装饰器内部渲染部分?
答案 0 :(得分:5)
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