【问题标题】:Generating the input id with an ActiveRecord model使用 ActiveRecord 模型生成输入 id
【发布时间】:2010-06-10 19:51:23
【问题描述】:

在给定模型的情况下,如何生成输入的id 属性?例如,如果我有一个带有first_name 属性的Person 模型,表单助手会打印出一个带有此html 的文本框:

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

如何从代码中的其他位置(如控制器或其他位置)生成 person_first_name

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

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

    这些值是由 nodoc-ed InstanceTag 类中的私有方法生成的。您可以查看来源here。感兴趣的方法是add_default_name_and_idtag_id,可能还有tag_id_with_index。没什么好看的。

    【讨论】:

    • 是的,我确实在 InstanceTag 上闲逛了一段时间,但我对 ruby​​ 和 rails 还太陌生,无法真正掌握其中的内容:)。我想我一直把没有括号的方法误认为是属性/属性。
    【解决方案2】:

    我最终听从了 neutrino 的建议,并进一步查看了 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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 2012-06-03
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多