2014-03-14 3 views
1

Я пишу плагин Redmine и добавил несколько полей к issues форме через hooks (поля также добавлены в таблицу Issue), так хорошо. Теперь я хочу, чтобы эти поля были обязательными, но не могу понять, как «переопределить» поведение validates_presence_of для модели Issue.Рельсы 3.2. Переопределить validates_presence_of поведения

Я создал крючок для метода сохранения Issue, чтобы проверить наличие моих новых полей перед сохранением, но не уверен, что это лучший способ. Можно ли просто расширить модель Issue, чтобы она подтверждала наличие моих новых полей?

+1

Вы можете добавить в модель подтверждает: new_field: присутствие => верно – Debadatt

+0

Благодаря @Debadatt. Я не могу изменить исходную модель проблемы, можно ли ее расширить, чтобы добавить это предложение? – ssantos

ответ

1

Вы можете добавить валидации на новые поля в своем плагине. Примером может служить here

# load plugin file(s) 
Rails.configuration.to_prepare do 
    TimeEntry.send(:include, TimeLimitTimeEntryPatch) 
end 



# in patch file 
module TimeLimitTimeEntryPatch 
    def self.included(base) 

    base.send(:include, InstanceMethods) 

    base.class_eval do 
     unloadable 

     validates_presence_of :comments 
     validate :validate_time_limit_allowed_ip 

    end 

    end 

    module InstanceMethods 

    def validate_time_limit_allowed_ip 
     # add error if permission is not set and IP is not allowed 
     if !self.class.have_permissions?(user, project) && !time_limit_allowed_ip 
     errors.add(:hours, I18n.t(:not_allowed_ip)) 
     end 
    end 

    end 

end 
+0

Спасибо огромное @gotva, я был так близок! – ssantos

0

В качестве альтернативы:

1) Создать расширение где-то в Lib каталога (убедитесь, что это required):

module IssueExtensions 
    extend ActiveSupport::Concern 

    included do 
    validates_presence_of :new_attr 
    end 

end 

2) Отправить его Issue модели. Хорошее место для этого может быть config/initializers/extensions.rb (должен быть инициализирован после Redmine очевидно):

Issue.send(:include, IssueExtensions) 
Смежные вопросы