Rails ActiveStorage url_for returns 无效的 URL
Rails ActiveStorage url_for returns an URL which is not valid
我有一个带头像的员工模型。我可以将图像附加到头像,但每当我尝试显示图像时,
url_for(@employee.avatar)
产生一个死link。我所看到的只是标签中 alt 属性的值。我得到的图片标签如下
<img src="/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBDZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--4786aa4d9d82d8f8d572b857965088b20fcb2f49/Portrait.jpg"
alt="Thumbnail">
而且我知道图像已正确附加。当我调用以下命令时,我得到了这个结果:
@employee.avatar
=> #<ActiveStorage::Attached::One:0x00007ff7e9ba41c0 @name="avatar",
@record=#<Employee id: 4, first_name: "Meda", last_name: "Burgdorf",
created_at: "2019-03-03 23:03:00", updated_at: "2019-03-03 23:17:56">,
@dependent=:purge_later>
正如我在存储目录中看到的图像
非常感谢您的帮助。谁能帮我显示保存的图片。
这是我的设置。
class Employee < ApplicationRecord
has_one_attached :avatar
...
end
我的 storage.yml 文件的内容
local:
service: Disk
root: <%= Rails.root.join("storage") %>
我的 Active Storage 迁移已迁移。查看我的 schema.rb 文件
ActiveRecord::Schema.define(version: 2019_03_03_211537) do
create_table "active_storage_attachments", force: :cascade do |t|
t.string "name", null: false
t.string "record_type", null: false
t.integer "record_id", null: false
t.integer "blob_id", null: false
t.datetime "created_at", null: false
t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id"
t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
end
create_table "active_storage_blobs", force: :cascade do |t|
t.string "key", null: false
t.string "filename", null: false
t.string "content_type"
t.text "metadata"
t.bigint "byte_size", null: false
t.string "checksum", null: false
t.datetime "created_at", null: false
t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
end
由于 Active Storage 将路由附加到主路由文件中,因此它们会在您捕获所有路由后出现。更好的是你可以逃避像
这样的活动存储路径
get '*path', to: redirect('/'), constraints: lambda { |req|
req.path.exclude? 'rails/active_storage'
}
我有一个带头像的员工模型。我可以将图像附加到头像,但每当我尝试显示图像时,
url_for(@employee.avatar)
产生一个死link。我所看到的只是标签中 alt 属性的值。我得到的图片标签如下
<img src="/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBDZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--4786aa4d9d82d8f8d572b857965088b20fcb2f49/Portrait.jpg"
alt="Thumbnail">
而且我知道图像已正确附加。当我调用以下命令时,我得到了这个结果:
@employee.avatar
=> #<ActiveStorage::Attached::One:0x00007ff7e9ba41c0 @name="avatar",
@record=#<Employee id: 4, first_name: "Meda", last_name: "Burgdorf",
created_at: "2019-03-03 23:03:00", updated_at: "2019-03-03 23:17:56">,
@dependent=:purge_later>
正如我在存储目录中看到的图像
非常感谢您的帮助。谁能帮我显示保存的图片。
这是我的设置。
class Employee < ApplicationRecord
has_one_attached :avatar
...
end
我的 storage.yml 文件的内容
local:
service: Disk
root: <%= Rails.root.join("storage") %>
我的 Active Storage 迁移已迁移。查看我的 schema.rb 文件
ActiveRecord::Schema.define(version: 2019_03_03_211537) do
create_table "active_storage_attachments", force: :cascade do |t|
t.string "name", null: false
t.string "record_type", null: false
t.integer "record_id", null: false
t.integer "blob_id", null: false
t.datetime "created_at", null: false
t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id"
t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
end
create_table "active_storage_blobs", force: :cascade do |t|
t.string "key", null: false
t.string "filename", null: false
t.string "content_type"
t.text "metadata"
t.bigint "byte_size", null: false
t.string "checksum", null: false
t.datetime "created_at", null: false
t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
end
由于 Active Storage 将路由附加到主路由文件中,因此它们会在您捕获所有路由后出现。更好的是你可以逃避像
这样的活动存储路径get '*path', to: redirect('/'), constraints: lambda { |req|
req.path.exclude? 'rails/active_storage'
}