如何在模型上使用回调时访问params []

时间:2013-12-10 16:25:17

标签: ruby-on-rails callback

我正在使用回调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

2 个答案:

答案 0 :(得分:1)

params是控制器问题,与模型完全分开。例如,如果您尝试从控制台保存该模型,请考虑应该发生什么。

您需要在从控制器实例化后将param传递给模型,然后在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]

答案 1 :(得分:0)

你没有,模特不知道控制器或参数哈希。

您应该在控制器中包含此逻辑,而不是强制它在回调中。