2017-05-03 72 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 
相关问题