2017-05-24 4 views
2

Rails Admin gem을 사용하고 있습니다. 새 활동 유형을 추가하고 동일한 이름으로 다시 작성하면 해당 이름이 이미 사용되었는지 확인합니다. 하지만 하나를 편집하려고 할 때마다 "이름을 비워 둘 수 없습니다."Rails Admin에서 before_validation을 사용할 때 필드가 비게됩니다.

예를 들어 수영을 만들었고 수영/수영 등 새로운 활동 유형을 추가하려고했습니다. 이것을 피하십시오. before_validation 콜백을 사용하여 첫 번째 문자를 대문자로 만들고 name의 고유성을 확인하십시오.

예, 작동하지만 제출할 때마다 name 입력란을 편집하려고하면 입력란이 비워집니다.

참고 : 또한 없이 사용하려고 시도했지만 작동하지 않았습니다.

활동 유형

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