v5.0.0.1 - Show latest stable - 0 notes

RecordIdentifier encapsulates methods used by various ActionView helpers to associate records with DOM elements.

Consider for example the following code that form of post:

<%= form_for(post) do |f| %>
  <%= f.text_field :body %>
<% end %>

When post is a new, unsaved ActiveRecord::Base instance, the resulting HTML is:

<form class="new_post" id="new_post" action="/posts" accept-charset="UTF-8" method="post">
  <input type="text" name="post[body]" id="post_body" />

When post is a persisted ActiveRecord::Base instance, the resulting HTML is:

<form class="edit_post" id="edit_post_42" action="/posts/42" accept-charset="UTF-8" method="post">
  <input type="text" value="What a wonderful world!" name="post[body]" id="post_body" />

In both cases, the id and class of the wrapping DOM element are automatically generated, following naming conventions encapsulated by the RecordIdentifier methods #dom_id and #dom_class:

dom_id(Post.new)         # => "new_post"
dom_class(Post.new)      # => "post"
dom_id(Post.find 42)     # => "post_42"
dom_class(Post.find 42)  # => "post"

Note that these methods do not strictly require Post to be a subclass of ActiveRecord::Base. Any Post class will work as long as its instances respond to to_key and model_name, given that model_name responds to param_key. For instance:

class Post
  attr_accessor :to_key

  def model_name
    OpenStruct.new param_key: 'post'

  def self.find(id)
    new.tap { |post| post.to_key = [id] }


NEW = 'new'.freeze

JOIN = '_'.freeze


Show files where this module is defined (1 file)
Register or log in to add new notes.