【问题标题】:How can I dynamically determine which model a controller is controlling?如何动态确定控制器控制的模型?
【发布时间】:2010-02-09 23:29:20
【问题描述】:

我正在编写一个 Rails 插件,并且需要能够动态确定控制器与哪个模型相关联。例如,如果我有一个 PeopleController,我需要一种干净的方式来确定控制器是否处理 Person 模型。

我查看了 API 并没有找到它的方法。

作为一个正则表达式与一些ActiveSupport 变形技巧(如singularize)结合使用的唯一方法是吗?

如果是这样,这种方法有什么缺陷吗?什么是边缘情况?

【问题讨论】:

    标签: ruby-on-rails dynamic model controller activesupport


    【解决方案1】:

    控制器和模型相关只是一个约定,所以真的没办法。

    你想做什么?

    【讨论】:

    • 我正在控制器中动态添加 ajax 验证方法。像这样的东西:ajax_validates_for :first_name, :last_name。我想我只需要第一个参数,即属性存在的模型名称:ajax_validates_for :person, :first_name, :last_name。谢谢!
    • 是的,这可能是最简单的方法
    【解决方案2】:

    我只是修改了一个小 KandadaBoggu 答案,使其对控制器的任何实例都更加自动化。

    # In a controller instance
    klass_name = self.class.to_s.gsub(/Controller$/, '').singularize
    klass = klass_name.constantize
    

    【讨论】:

      【解决方案3】:

      假设您遵循 Rails 对模型和控制器名称的命名约定,您可以执行以下操作来获取模型名称/类。

      # In a controller instance
      klass = controller_name.classify.constantize
      

      【讨论】:

        猜你喜欢
        • 2012-05-19
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多