module ActionView::RecordIdentifier

def dom_id(record_or_class, prefix = nil)

dom_id(Post, :custom) # => "custom_post"
dom_id(Post.find(45), :edit) # => "edit_post_45"

If you need to address multiple instances of the same class in the same view, you can prefix the dom_id:

dom_id(Post) # => "new_post"
dom_id(Post.find(45)) # => "post_45"

If no id is found, prefix with "new_" instead.
The DOM id convention is to use the singular form of an object or class with the id following an underscore.
def dom_id(record_or_class, prefix = nil)
  raise ArgumentError, "dom_id must be passed a record_or_class as the first argument, you passed #{record_or_class.inspect}" unless record_or_class
  record_id = record_key_for_dom_id(record_or_class) unless record_or_class.is_a?(Class)
  if record_id
    "#{dom_class(record_or_class, prefix)}#{JOIN}#{record_id}"
  else
    dom_class(record_or_class, prefix || NEW)
  end
end