2017-05-03 43 views
0

當我使用Active Admin表單時,空字符串值被保存爲「」(空)而不是NULL值。ActiveRecord + ActiveAdmin,保存一個空字符串而不是空

是否有一個參數,我應該在初始化程序中設置以將每個空值保存爲NULL在MySQL中?

form do |f| 
    input :label 
    input :description, as: :text 
    input :country 
    input :city 
    end 
    actions 
end 

這是我的移民模式:

create_table "projects" do |t| 
    t.string "label", limit: "40" 
    t.string "country", limit: "2" 
    t.string "city", limit: "200" 
    t.string "description", limit: 600 
end 

這是我的Gemfile。

gem 'rails', '~> 5.1.0.rc1' 
gem 'mysql2', '>= 0.3.18', '< 0.5' 
gem 'puma', '~> 3.0' 
gem 'sass-rails', '~> 5.0' 
gem 'uglifier', '>= 1.3.0' 
gem 'turbolinks', '~> 5' 
gem 'jbuilder', '~> 2.5' 
gem 'active_model_serializers', '~> 0.10.5', require: true 
gem 'kaminari' 
gem 'inherited_resources', '~> 1.7' 
gem 'activeadmin', '~> 1.0.0.pre5' 
gem 'sidekiq', '~> 4.2.10' 
gem "paperclip", "~> 5.1.0" 
gem 'aws-sdk', '~> 2.3.0' 
+0

您因此面臨什麼問題? –

+0

該表格在MySQL表中將空值保存爲「」而不是NULL。 – Cornelius

回答

0

這似乎是窗體的默認行爲。我來到這個寶石nilify_blanks這將解決您的問題。 希望它有幫助。

+0

我看到了寶石,但構建標誌有錯誤狀態。我認爲已被棄用 – Cornelius

+0

我也看到了這一點,但您可以嘗試讓我知道它是否打破了我們的代碼,值得一試,如果您希望它爲所有模型保持乾燥。而且我認爲如果您沒有看到http://stackoverflow.com/a/40387633/6548745,也可能會遇到此解決方案。這對於有限的屬性是有益的。 –

+0

那麼哪一個爲你工作?創業板或代碼從SO鏈接? @Cornelius –

0

這是一個Rails,而不是ActiveAdmin問題。

如果可以的話,don't use null for empty strings。使用空可能是理論上正確,但在實踐中,我發現與MySQL簡單,不容易出錯的工作,如果所有VARCHAR列設置不爲空,如:

t.string :label, limit: 40, null: false 

nilify_blanks寶石是由於導軌4.相反無人維護,請在您的型號中嘗試以下操作:

def label=(label) 
    write_attribute :label, label.present? ? label : nil 
end 
相關問題