Rails模型需要验证包含?班级名称

时间:2015-07-17 17:03:08

标签: ruby-on-rails activerecord single-table-inheritance

我有一个名为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中吗?有什么建议吗?

2 个答案:

答案 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