2017-05-24 7 views
2

私はRails Admin gemを使用しています。新しいアクティビティー・タイプを追加して、同じ名前でもう一度作成すると、そのアクティビティー・タイプがすでに使用されていることが検証されます。しかし、編集しようとするたびに「名前は空白にできません」Rails管理でbefore_validationが使用されていると、フィールドは空白になります

たとえば、私が作成した「Swimming/SWIMMING」などの新しいアクティビティタイプを追加しようとしました。これを回避するbefore_validationコールバックを使用して最初の文字を大文字にしてから、一意性を確認してnameにしてください。

はい、動作していますが、nameフィールドを編集しようとすると、投稿後に空白になります。

注:また、を使わないで、before_validationを使用しようとしましたが、機能しませんでした。

アクティビティタイプ

class ActivityType < ApplicationRecord 
    before_destroy :ensure_has_no_activity_type 
    before_validation :capitalize_first_letter_name 
    has_many :activities 

    validates :name, presence: true,:uniqueness => {:case_sensitive => true}, length: { maximum: 20 },format: Utilities::RegexValidations.alphanumeric_underscore 
    validates :description, presence: false 

    private 

    def ensure_has_no_activity_type 
    if activities.present? 
     errors.add(:base, 'Cannot delete activity type that has activity') 
    throw(:abort) 
    end 
    end 
    def capitalize_first_letter_name 
    # Capitalize the first letter and the rest will be small letter 
    self.name = self.name.capitalize! 
    end 

end 

質問:私は編集して、それを提出しようとしようとした時はいつでも、なぜ、名前欄が空白になっていますか?これの理由は何ですか?

答えて

3

capitalize_first_letter_nameから問題が発生します。 "".capitalize!nilを返します。 "".capitalizeに変更すると、期待どおり空の文字列が返されます。

さらに、変更が加えられていない場合、capitalize!はnilを返します。 https://ruby-doc.org/core-2.2.0/String.html#method-i-capitalize-21を参照してください。

+0

私はそれを読んだことがあります!最初の文字は首都になり、残りは小文字になります。私は大文字を使った!私が与えた状況を避けたいからです。 – Angel

+0

この問題を防ぐにはどうすればいいですか? – Angel

+0

'capitalize!'を 'capitalize'に置き換えてみてください。 – yzalavin

関連する問題