2013-12-10 3 views
2

Я использую обратный вызов before_update для вызова функции на модели, которая устанавливает значение флажка в моей переменной.Как получить доступ к параметрам [] при обратном вызове модели

Проблема заключается в том, что флажок, установленный на params[:mail_checker_issue], недоступен на уровне модели.

Вопрос: Как получить доступ к этим параметрам с помощью обратного вызова before_update? Ниже моего кода:

module IssueSetChecketIssuePatch 
    def self.included(base) 
    base.send(:include, InstanceMethods) 
     base.class_eval do 
     before_save :before_mail_checker 
     end 
    end 
end 

module InstanceMethods 
    require_dependency 'issue' 
    def before_mail_checker 
    self.set_mail_checker_issue(params[:mail_checker_issue]) 
    end 

     def set_mail_checker_issue(mail) 
     @mail_checker = mail 
    end 

    def get_mail_checker_issue 
     @mail_checker 
    end 
end 

Rails.configuration.to_prepare do 
    Issue.send(:include, IssueSetChecketIssuePatch) 
end 

ответ

0

У вас нет моделей, которые не знают о контроллерах или параметрах hash.

Вы должны включить эту логику в свой контроллер вместо того, чтобы заставлять ее в обратном вызове.

+0

Вы предполагая, что это невозможно сделать это с помощью функции обратного вызова? – kamusett

+2

Выполнение внутри обратного вызова ** неверно **. Хотя это возможно с помощью хаков, это ужасное решение и не имеет смысла, учитывая, как организован код в рельсах. –

1

params - это проблема с контроллером и полностью отделена от моделей. Рассмотрим, что должно произойти, если вы попытались сохранить эту модель с консоли, например.

Вам необходимо передать параметр модели после создания экземпляра с вашего контроллера, а затем проверить значение, заданное в модели, в вашем обратном вызове before_save.

Также стоит отметить, что ваш код несколько не-Rubyish (и действительно, очень похож на Java!) - вы можете получить тот же эффект, просто определяя attr на модели.

Rails.configuration.to_prepare do 
    require_dependency 'issue' 
    class Issue 
    attr_accessor :mail_checker_issue 
    end 
end 

Затем, когда у вас есть вопрос:

# Controller code 
@issue = Issue.find(params[:id]) 
@issue.mail_checker_issue = params[:mail_checker_issue] 
+0

Ха-ха, ты прав. Я отправляюсь из java, и я пока еще не рубин. Конечно, я возьму ваши советы. Спасибо. Хороший код. – kamusett

Смежные вопросы