Jam*_*sen 112 format ruby-on-rails render actionview partial
我正在尝试生成包含一些HTML的JSON响应.因此,我有/app/views/foo/bar.json.erb
:
{
someKey: 'some value',
someHTML: "<%= h render(:partial => '/foo/baz') -%>"
}
Run Code Online (Sandbox Code Playgroud)
我希望它渲染/app/views/foo/_baz.html.erb
,但它只会渲染/app/views/foo/_baz.json.erb
.传球:format => 'html'
没有帮助.
Tim*_*nes 99
从Rails 3.2.3开始,当调用render时:部分使用
:formats => [:html]
Run Code Online (Sandbox Code Playgroud)
代替
:format => 'html'
Run Code Online (Sandbox Code Playgroud)
Sam*_*kes 64
怎么了?
render :partial => '/foo/baz.html.erb'
Run Code Online (Sandbox Code Playgroud)
?我只是尝试这个从Atom构建器模板中呈现HTML ERB部分,它工作正常.不需要弄乱全局变量(是的,我知道他们面前有"@",但这就是他们的意思).
您的with_format &block
方法很酷,并且具有仅指定格式的优点,而简单方法也指定模板引擎(ERB/builder/etc).
zgc*_*rch 32
对于Rails 3,with_format块可以工作,但它有点不同:
def with_format(format, &block)
old_formats = formats
self.formats = [format]
block.call
self.formats = old_formats
nil
end
Run Code Online (Sandbox Code Playgroud)
Dre*_*ewB 32
Rails 4允许您传递格式参数.所以你可以做到
render(:partial => 'form', :formats => [:html])}
Run Code Online (Sandbox Code Playgroud)
请注意,您可以在Rails 3中执行类似的操作,但不会将该格式传递给任何子部分(如果表单调用其他部分).
您可以通过创建config/initializers/renderer.rb在Rails 3中获得Rails 4的能力:
class ActionView::PartialRenderer
private
def setup_with_formats(context, options, block)
formats = Array(options[:formats])
@lookup_context.formats = formats | @lookup_context.formats
setup_without_formats(context, options, block)
end
alias_method_chain :setup, :formats
end
Run Code Online (Sandbox Code Playgroud)
见http://railsguides.net/2012/08/29/rails3-does-not-render-partial-for-specific-format/
Jam*_*sen 29
基于roninek的回应,我找到了最佳解决方案如下:
在/app/helpers/application.rb中:
def with_format(format, &block)
old_format = @template_format
@template_format = format
result = block.call
@template_format = old_format
return result
end
Run Code Online (Sandbox Code Playgroud)
在/app/views/foo/bar.json中:
<% with_format('html') do %>
<%= h render(:partial => '/foo/baz') %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是重新定义render
接受:format
参数.
我无法render :file
与当地人一起工作,也没有一些道路上的烦恼.
小智 25
在Rails 3中,View具有格式数组,这意味着您可以将其设置为查找[:mobile,:html].设置默认为寻找:移动模板,但回退到:html模板.设置它的效果将级联到内部部分.
我能找到的最好但仍然有缺陷的方法是将这条线放在每个完整移动模板的顶部(但不是部分).
<% self.formats = [:mobile, :html] %>
Run Code Online (Sandbox Code Playgroud)
缺点是你必须将该行添加到多个模板.如果有人知道如何设置这个,从application_controller.rb,我很想知道它.不幸的是,将该行添加到移动布局中并不起作用,因为模板在布局之前呈现.
vip*_*phe 16
只是详细说明zgchurch所写的内容:
认为它可能有用.
def with_format(format, &block)
old_formats = formats
begin
self.formats = [format]
return block.call
ensure
self.formats = old_formats
end
end
Run Code Online (Sandbox Code Playgroud)
小智 10
您有两种选择:
1)使用render:file =>"foo/_baz.json.erb"
2)通过设置@template_format变量将模板格式更改为html
render :file => "foo/_baz.json.erb"
Run Code Online (Sandbox Code Playgroud)
我有一个名为'api/item.rabl'的文件,我想从HTML视图中呈现它,所以我不得不使用:
render file: 'api/item', formats: [:json]
(file
因为文件名中没有下划线,formats
而不是format
(和传递和数组))
归档时间: |
|
查看次数: |
73038 次 |
最近记录: |