4

我正嘗試在Rails 5.2中使用Active Storage。我發現,我應該在遷移file類型創建領域,但我有一個錯誤:無法在Rails中使用ActiveStorage創建文件字段

$ 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

我有主動式存儲遷移和我通過什麼好的

+1

我很確定在rails遷移中沒有這樣的數據類型'文件',請嘗試使用f.string –

+1

檢查此博客:https://rubyinrails.com/2017/07/21/rails-introduces-active- storage-for-file-uploads/ –

+0

所以,是的,我使用了那個鏈接。如果你創建字符串字段,它會在稍後顯示類型不匹配。 – zishe

回答

10

相反,你需要在自己的遷移創建一個專用領域的一個文件(t.file :image)主動存儲使用兩個表,你setuprails active_storage:install。 當您建立storage.yml你應該能夠使用

has_one_attached :image 
Dishes模型中

,而無需創建image列。

+0

我認爲我可能不應該爲圖像創建任何字段,稍後我會檢查它,但我猜這是正確的答案。 – zishe

+0

是的,你是對的,謝謝你的回答! – zishe

4

您可以檢查這個問題,因爲(ActiveRecord field type)沒有任何類型的像file如果你需要上傳你可以用string類型創建像t.string