2017-05-03 7 views
0

Active Adminフォームを使用すると、空の文字列値はNULL値の代わりに ""(空)として保存されます。ActiveRecord + ActiveAdmin、nullの代わりに空の文字列を保存

MySQLですべての空の値をNULLとして保存するには、イニシャライザで設定する必要があるパラメータはありますか?

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

私もそれを参照してくださいしようとすると、それが乾燥しているすべてのモデルのためにそれをしたい場合は、試してみる価値がURコードを壊す場合はお知らせください。そして、もし私が見ていなければ、あなたはこの解決策の至る所に来たかもしれないと思います。http://stackoverflow.com/a/40387633/6548745限られた属性には適しています。 –

+0

これはあなたのために働いたのですか?宝石やSOリンクからのコード? @Cornelius –

0

これはRailsであり、ActiveAdminの問題ではありません。

できる場合はdon't use null for empty stringsです。ヌルを使用すると、理論的には正しいかもしれないが、すべてのvarchar列がnullでないように設定されている場合、実際に私がしやすいのMySQLでの作業単純かつ少ないエラーを発見した、例えば:

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

nilify_blanks宝石は、代わりにRailsの4ので、メンテナンスされていないですお使いのモデルで次のように試してみてください:

def label=(label) 
    write_attribute :label, label.present? ? label : nil 
end 
関連する問題