使用ActiveRecord模型生成输入ID
在给定模型的情况下,如何生成输入的id
属性? 例如,如果我有一个带有first_name
属性的Person
模型,则表单助手会打印出一个带有此html的文本框:
如何从代码中的其他位置生成person_first_name
(如在控制器或某个地方)?
一个好习惯是偶尔挖掘rails的代码:)
这些值由nodoced ed InstanceTag
类中的私有方法生成。 你可以在这里看到来源。 感兴趣的方法是add_default_name_and_id
, tag_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