您可以尝试使用 JBuilder 测试中的逻辑https://github.com/rails/jbuilder/blob/master/test/jbuilder_template_test.rb#L287-L311
我能够让它在我的控制器/控制台中工作
def build_view(options = {})
lookup_context = ActionView::LookupContext.new([ "app/views/homes/" ], {}, [""]) # REPLACE HERE YOUR VIEW OR PARTIAL DIRECTORY PATH
controller = self
view = if ActionView::Base.respond_to?(:with_empty_template_cache)
ActionView::Base.with_empty_template_cache.new(lookup_context, options.fetch(:assigns, {}), controller)
else
ActionView::Base.new(lookup_context, options.fetch(:assigns, {}), controller)
end
def view.view_cache_dependencies; []; end
view
end
result = build_view.render(partial: "show") # name of your partial or view
=> :build_view
Rendered homes/_show.json.jbuilder (Duration: 0.6ms | Allocations: 174)
=> "{\"post\":{\"title\":\"Merge HOWTO\",\"author\":{\"name\":\"David\"}}}"
据说将视图中的数据渲染回控制器不是我建议的事情,至少可以说这不是一个非常简单和轻松的过程(考虑到您的 rails 应用程序的全部目的是让您的应用程序将数据转换为然后查看您的浏览器,这与您询问的路线相反)
我确实认为这里更好的方法是将 JSON 构建拉入类或模型或方法中,然后在控制器和视图中使用该方法
def the_json_data_you_want
hash = { author: { name: "David" } }
Jbuilder.new do |json|
json.post do
json.title "Merge HOWTO"
json.merge! hash
end
end
end
并检索您可以调用的 JSONthe_json_data_you_want.target!
irb(main):7:0> the_json_data_you_want.target!
=> "{\"post\":{\"title\":\"Merge HOWTO\",\"author\":{\"name\":\"David\"}}}"
然后你可以在你的控制器中使用它并将它传递给它将被渲染的视图
这里有更多文档https://github.com/rails/jbuilder