sinatra - 如何在 Sinatra 中使用 CarrierWave 显示图像
问题描述
我在使用 CarrierWave 时遇到了很多困难,所以我编写了一个小程序来看看我是否可以做到这一点:
require 'sinatra'
require 'dm-core'
require 'dm-migrations'
require 'carrierwave/datamapper'
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
end
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/photogallery.sqlite3")
class Image
include DataMapper::Resource
property :id, Serial
property :title, Text
mount_uploader :image, ImageUploader
end
DataMapper.finalize
DataMapper.auto_migrate!
get "/" do
@images = Image.all
erb :index
end
post "/" do
image = Image.new(:title => params[:title])
image.image = params[:image]
image.save
redirect "/"
end
__END__
@@ index
<% @images.each do |image| %>
<p>
<%= image.title %>
</p>
<a href="<%= image.image.url %>">
<img src="<%= image.image.url %>">
</a>
<% end %>
<form action="/" method="post">
<label for="title">Title</label>
<input type="text" name="title"><br>
<label for="image">Image</label>
<input type="file" name="image"><br>
<input type="submit" value="Save">
</form>
从计算机上传图像时,似乎无法显示图像。就好像图像没有保存在任何地方,因此无法检索。
锚标记正确地引用了图像应该在的位置,但没有图像。
我究竟做错了什么?
解决方案
转换为@MrMos的答案...
没关系,我发现了。我这样做了:
require 'sinatra'
require 'dm-core'
require 'dm-migrations'
require 'carrierwave/datamapper'
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/development.db")
class ImageUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
'images'
end
end
class Image
include DataMapper::Resource
property :id, Serial
property :title, Text
mount_uploader :file, ImageUploader
end
DataMapper.finalize
DataMapper.auto_migrate!
get '/' do
@images = Image.all
erb :index
end
post '/' do
Image.create(params[:image])
redirect to('/')
end
__END__
@@ index
<!DOCTYPE html>
<html>
<body>
<form action="/" method="post" enctype="multipart/form-data"></div>
<input type="text" name="image[title]" />
<input type="file" name="image[file]" />
<input type="submit" name="submit" value="Upload" />
</form>
<% @images.each do |image| %>
<p><%= image.title %></p>
<img src="/images/<%= images.file_identifier %>" />
<% end %>
</body>
</html>
推荐阅读
- python-3.x - 如何将变量传递给 pool.map 运行的所有进程?
- java - 我是否需要一个 PopUpWindow 或 Dialog 才能在图像中解释正确的设计
- java - 控制异步网络消息传递设计速率的通信管理器
- javascript - 如何使用 Javascript 分解 HTML 字符串中的每个单词,然后在 HTML 中一个一个地显示每个单词?
- google-drive-api - 当被要求在文件夹中创建文件夹时,谷歌驱动器 v3 创建文件
- sql - 在循环中运行 oracle 更新查询
- node.js - Angular App Heroku 部署 - 应用程序错误 h10 状态 = 503
- html - 一个带有两个链接的 fa 图标
- dart - 如何在 BuildContext 之外的 Flutter 中使用路由?
- php - 不明白为什么类别没有崩溃