这是怎么做的:
1) 在您的布局中包含sidebar partial:
#app/views/layouts/application.html.erb
<%= render "shared/sidebar" %>
这会调用/app/views/shared 中的_sidebar.html.erb 部分:
2) 填充“默认”侧边栏部分:
#app/views/shared/_sidebar.html.erb
...
这里要注意的重要一点是,partials 应该永远在内部包含 @instance 变量。
Partials 有locals,您可以使用以下命令传递:
<%= render "shared/sidebar", locals: { variable: "value" } %>
Partials 旨在在您的 Web 应用程序的 any 部分上运行,并且由于 @instance 变量存在于对象的单个“实例”(IE @ 987654333@ 在/users 中不可用),您可以通过将局部变量传递给它们来确保始终填充部分。
这就是您在将post#show 代码复制到sidebar 部分时收到错误的原因——show 操作的实例变量不会出现在应用的其他部分。
3) 使用JS拉取图片对象
当有人点击网格中的图像时,我基本上希望显示视图显示在侧边栏中。
您需要更具体 - 您真的想要“显示”动作出现,还是想要它的部分功能?
无论哪种方式,你最好使用 JS 和 ajax 来拉取数据:
#app/controllers/images_controller.rb
class ImagesController < ApplicationController
layout Proc.new { |controller| !controller.request.xhr? }
end
#app/assets/javascripts/application.js
$(document).on("click", "img", function(e) {
e.preventDefault();
$.get($(this).attr("href"), function(data){
$(".sidebar .image").html(data);
});
});
这将采用呈现的images#show 动作(无布局),并将其附加到您的 sidebar 部分。这是您要求的 - 如果需要,我可以更改它。