使用ActiveRecord模型生成输入ID

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

  

如何从代码中的其他位置生成person_first_name (如在控制器或某个地方)?

一个好习惯是偶尔挖掘rails的代码:)

这些值由nodoced ed InstanceTag类中的私有方法生成。 你可以在这里看到来源。 感兴趣的方法是add_default_name_and_idtag_id ,可能tag_id_with_index 。 没有什么花哨的。

我最终关注了中微子的建议,并更多地查看了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