我有一个名为ToolFilter的模型,其中包含一个'tool_type'列。这里的字符串是指工具的类。我在我的application_controller中放了一个名为tools_list的方法,它获取了Tool的后代。这在我的前端工作得很好,但是ToolFilter正在抱怨方法tools_list。
class ToolFilter < ActiveRecord::Base
validate :existence_of_tool
def existence_of_tool
unless tools_list.include? tool_type
errors.add(:tool_type, "Invalid tool_type {{tool_type}}, use 'tools_list' to see a list of valid tool_object_types")
end
end
class ApplicationController < ActionController::Base
helper_method :tools_list
def tools_list
Rails.application.eager_load!
Tool.descendants
end
告诉模型关于文件系统中的其他类有点奇怪,但我需要验证它是否是其中之一。我应该把tools_list作为一个模块并将其包含在ToolFilter中吗?有什么建议吗?
答案 0 :(得分:1)
将此内容写入包含模型中的助手
ApplicationController.helpers.tool_list
虽然我不建议在模型中调用帮助器。
用类检查工具是个坏主意。
答案 1 :(得分:0)
我最终创建了一个名为ToolExtention的模块,其中包含这些辅助方法。然后我将这个模块包含在我需要的控制器中,并将我的逻辑从视图中移到控制器中,我相信这是更好的实践。
module ToolExtension
def self.tools_list
Rails.application.eager_load!
Tool.descendants
end
...
class ProjectsController < ApplicationController
include ToolExtension
...
ToolExtension.tools_list