使用ActiveRecord模型生成输入ID

时间:2010-06-10 19:51:23

标签: ruby-on-rails activerecord

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

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

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

2 个答案:

答案 0 :(得分:1)

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

这些值由nodoced ed InstanceTag类中的私有方法生成。您可以看到来源here。感兴趣的方法是add_default_name_and_idtag_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