【问题标题】:Can't create file field with ActiveStorage in Rails无法在 Rails 中使用 ActiveStorage 创建文件字段
【发布时间】:2018-05-31 10:22:59
【问题描述】:

我正在尝试在 Rails 5.2 中使用 Active Storage。我发现我应该在迁移中创建类型为file 的字段,但是我有一个错误:

$ rdm
Running via Spring preloader in process 40193
== 20171217191942 CreateDishes: migrating 
=====================================
-- create_table(:dishes)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

undefined method `file' for #<ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition:0x00007fd56e297750>
/Users/alder/Projects/_apps/service_exchange/rails-backend/db/migrate/20171217191942_create_dishes.rb:6:in `block in change'
/Users/alder/Projects/_apps/service_exchange/rails-backend/db/migrate/20171217191942_create_dishes.rb:3:in `change'
-e:1:in `<main>'

迁移:

class CreateDishes < ActiveRecord::Migration[5.2]
  def change
    create_table :dishes do |t|
      t.string :name, index: true
      t.string :description
      t.file :image

      t.timestamps
    end
  end
end

我试图创建字符串字段,但它不起作用。

official docs 中找不到任何相关信息

我已经迁移到活动存储并且我通过了 ok

【问题讨论】:

  • 我很确定 Rails 迁移中没有这种数据类型“文件”,请尝试使用 f.string
  • 查看此博客:rubyinrails.com/2017/07/21/…
  • 所以,是的,我使用的正是那个链接。如果你制作字符串字段,它会在稍后显示类型不匹配。
  • 迁移继承自哪个类?确保它是最新的迁移版本,以便在 ActiveRecord 中选择新的列类型,ActiveRecord::Migration[5.2]

标签: ruby-on-rails ruby ruby-on-rails-5 rails-activestorage ruby-on-rails-5.2


【解决方案1】:

您需要在自己的迁移 (t.file :image) 中创建一个专用字段,而不是活动存储使用您在 setuprails active_storage:install 中的两个表。 当您设置 storage.yml 时,您应该可以使用

has_one_attached :image

Dishesmodel 内而不创建imagecolumn。

【讨论】:

  • 我认为可能我不应该为图像创建任何字段,我稍后会检查它,但我想这是正确的答案。
  • 我在使用 :avatar 作为数据字段的名称时遇到问题,这可能是个问题吗?
【解决方案2】:

你可以检查这个问题(ActiveRecord field type),因为没有像file这样的任何类型,如果你需要上传一个可以使用string类型创建的文件,比如t.string

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多