在给定模型的情况下,如何生成输入的id
属性?例如,如果我的模型Person
具有first_name
属性,则表单助手会打印出一个带有此html的文本框:
<input type="text" id="person_first_name" />
如何从代码中的其他位置生成person_first_name
(如在控制器或某个地方)?
答案 0 :(得分:1)
一个好习惯是不时地挖掘rails代码:)
这些值由nodoced ed InstanceTag
类中的私有方法生成。您可以看到来源here。感兴趣的方法是add_default_name_and_id
,tag_id
,可能还有tag_id_with_index
。没有什么好看的。
答案 1 :(得分:1)
我最终关注了中微子的建议并且更多地查看了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