gpt4 book ai didi

ruby-on-rails - rails : Render a View (not a partial) From Within a View

转载 作者:行者123 更新时间:2023-12-03 07:32:45 24 4
gpt4 key购买 nike

我有一个同时响应 htmljs 的 Controller 。 html View 渲染整个页面(包括页眉和页脚),而 js 仅替换 #main。除了页眉和页脚之外,两种格式呈现相同的内容。我可以用三个文件得到这个效果:

_show.html.erb
<div>Content!</div>

show.html.erb
<%= render "show" %>

show.js.erb
$("#main").fadeIn("<%= escape_javascript(render 'show') %>");

这可行,但如果我不需要单独的 _show 部分,我会更喜欢。不幸的是,这不起作用:

show.html.erb
<div>Content!</div>

show.js.erb
$("#main").fadeIn("<%= escape_javascript(render 'show') %>");

因为 Rails 将查找 show 部分,而不是实际 View 。

有没有办法让 Rails 查找 View 文件,而不是部分文件?

最佳答案

在另一个 View 中渲染非部分 View 并不完全是 Rails Way™。您当前的解决方案可能更好,而且并不是一种不常见的方法。如果您对部分名称与操作相同感到奇怪,请将其重命名为 _body 或其他适当的名称。

但是,如果您的 View 可以共享(在本例中似乎可以),您可以将其设为布局。

这得益于以下事实:Rails 将呈现 html,这在某种程度上违反了最小意外原则。 js 的模板如果没有,则采取行动js模板存在。这意味着您可以删除 js 模板和部分模板,然后仅创建一个标题为 fadein.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

关于ruby-on-rails - rails : Render a View (not a partial) From Within a View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com