nul*_*ull 38 ruby-on-rails render view
我有一个控制器,既响应html和js.该html视图使得整个页面(包括页眉和页脚),而js只替换#main.除了页眉和页脚之外,两种格式都呈现相同的内容.我可以通过三个文件获得此效果:
_show.html.erb
<div>Content!</div>
show.html.erb
<%= render "show" %>
show.js.erb
$("#main").fadeIn("<%= escape_javascript(render 'show') %>");
Run Code Online (Sandbox Code Playgroud)
这有效,但我更喜欢如果我不需要单独的_show部分.不幸的是,这不起作用:
show.html.erb
<div>Content!</div>
show.js.erb
$("#main").fadeIn("<%= escape_javascript(render 'show') %>");
Run Code Online (Sandbox Code Playgroud)
由于Rails会查找show部分视图,而不是实际视图.
有没有办法让Rails查找视图文件,而不是部分?
num*_*407 26
在另一个视图中渲染非局部视图并不完全是Rails Way™.您当前的解决方案可能更好,而不是一种不常见的方法.如果您对部分名称与操作相同感到奇怪,请将其重命名为_body或其他适当的内容.
但是,如果您的视图可以共享,在这种情况下似乎可以,您可以将其设置为布局.
事实上,如果没有模板存在,Rails将为操作呈现html模板,这有点违背了最少意外的原则.这意味着您可以删除js模板和部分模板,只需创建一个名为的布局,例如:jsjsfadein.js.erb
# yourviews/show.html.erb
<div>Content!</div>
# layouts/fadein.js.erb
$("#main").fadeIn("<%= escape_javascript(yield) %>");
# YourController.rb
def show
# ...
respond_to do |wants|
wants.html
wants.js { render :layout => "fadein" }
end
end
Run Code Online (Sandbox Code Playgroud)
Tik*_*boy 22
像其他人提到的那样,在另一个视图中渲染另一个非局部视图是"不是轨道方式",如果你仍然坚持这样做,一种方法是:
<%= render :file => '<replace with relative/absolute path>' %>
Run Code Online (Sandbox Code Playgroud)
fot*_*nus 10
您可以通过评论看到这不是一个好习惯.Rails具有视图,部分和布局的概念.也就是说,视图是您应该只使用一次的视图.所以我的建议是: