我正在使用Rails 5.我有一个模型(带有基础PostGres数据库)和一些基本数据列
name | character varying |
image | bytea | not null
content_type | character varying | not null
"图像"是我想要显示的图像的二进制数据。我想创建一个页面来显示图像和名称,但我无法在没有多个数据库调用的情况下弄清楚如何执行此操作。我的节目视图看起来像
<h1>Votes#show</h1>
<h2><%= @person.name %></h2>
<img src="<%= url_for(:controller => "people",
:action => "image",
:id => @person.id) %>" />
如您所见,为了渲染图像,我必须调用一个单独的控制器方法。显示此节目页面的方法是
def show
id = params[:id]
...
@person = Person.find_by_id(id)
end
和发送图像数据的控制器方法是
def image
@person = Person.find(params[:id])
send_data(@person.image,
:filename => @person.name,
:type => @person.content_type,
:disposition => "inline")
end
有谁知道如何简化我的视图,以便我只需要调用一个数据库调用来获取我的数据而不是两个?
答案 0 :(得分:0)
你能不能这样做吗?:
gulp.task("generate-service-worker", function(callback) {
swPrecache.write(path.join(outputDir, "service-worker.js"), {
staticFileGlobs: [
outputDir + "**/*.{js,html,json,css,png,jpg,gif,svg,eot,svg,ttf,woff,woff2}"],
importScripts: ["push.js"],
navigateFallback: ["index.html"],
stripPrefix: outputDir
}, callback);
});
答案 1 :(得分:0)
为什么不发送对象(你已经找到它)而不是发回id?对ruby来说有点新,所以不确定这在技术上是否正确,但似乎你可以做到:
<img src="<%= url_for(:controller => "people",
:action => "image",
:id => @person) %>" />
在控制器中只使用@person对象而不是再次查找它。可能也想将id重命名为人或某事。