代码之家  ›  专栏  ›  技术社区  ›  swilliams

使用ActiveRecord模型生成输入ID

  •  1
  • swilliams  · 技术社区  · 14 年前

    如何生成输入 id 属性,给定模型?例如,如果我有一个 Person 用一个 first_name 属性,表单帮助器使用此HTML打印文本框:

    <input type="text" id="person_first_name" />
    

    我该怎么做呢 person_first_name 从代码中的其他位置(比如控制器或其他位置)?

    2 回复  |  直到 14 年前
        1
  •  1
  •   alex.zherdev    14 年前

    一个好习惯是时不时地挖掘Rails的代码:)

    这些值由nodoc ed内的私有方法生成 InstanceTag 班级。你可以看到消息来源 here . 感兴趣的方法是 add_default_name_and_id , tag_id ,而且可能 tag_id_with_index . 那里没什么好奇心。

        2
  •  1
  •   swilliams    14 年前

    最后,我听从中微子的建议,看了更多的Rails代码。最后我在 InstanceTag 上课,然后稍微移动一下。我猴子把这个补上了 ActiveRecord::Base ,这可能不是最佳解决方案,但它现在起作用:

    def create_tag_id(method_name)
      object_name = ActionController::RecordIdentifier.singular_class_name(self)
      "#{sanitized_object_name(object_name)}_#{sanitized_method_name(method_name.to_s)}"
    end
    
    private
      def sanitized_object_name(object_name)
        object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
      end
    
      def sanitized_method_name(method_name)
        method_name.sub(/\?$/,"")
      end