【发布时间】:2014-02-28 08:11:20
【问题描述】:
无论如何创建一个我可以在模型和控制器中调用的函数?我有一个函数可以抓取一组文件并剥离扩展名并希望针对列表进行验证。但是我也想在控制器中访问这个列表,这样我就可以输出一个选项的选择框。我目前有这个,但是 VALID_MODULES 并没有一直被填充。
class Job < ActiveRecord::Base
after_initialize :init
VALID_MODULES =[];
validates :name, presence: true
validates :desc, presence: true
validates :api, presence: true, :inclusion => { :in => VALID_MODULES}
validates :filters, presence: true
validates :toe, presence: true
def init
Dir.foreach('lib/resources') do |item|
next if item == '.' or item == '..' or item == 'resource.rb'
#Wont be called very often so O(n) complexity is fine (small #elements)
VALID_MODULES.push(item[0..-4]) unless VALID_MODULES.include?(item[0..-4])
end
end
end
【问题讨论】:
-
几件事。 1) 这些模块是特定于 Job 类的吗?它们是否特定于工作实例?还是它们对应用程序是全局的 2)您也不希望在初始化时执行此功能,因为这将为您从数据库中提取的每条记录执行,并且成本非常高。这些问题的答案会影响正确的解决方案。
-
Peter,valid_modules 对应用程序来说确实是全局的。是的,我认为,这是我能够使用这些值作为验证并能够在控制器中访问它的唯一方法。
标签: ruby-on-rails ruby