module RecordIdentifier

Ruby on Rails edge

Since v4.0.13

Available in: v4.0.13 v4.1.16 v4.2.11.3 v5.0.7.2 v5.1.7 v5.2.8.1 v6.0.6.1 v6.1.7.10 v7.0.10 v7.1.6 v7.2.4 v8.0.5.1 v8.1.4 edge

Action View Record Identifier

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_with(model: 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" />

</form> “‘

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" />

</form> “‘

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_post” dom_class(Post) # => “post” 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'
end

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

end “‘

Extends

Constants

Methods (defined here)

Private methods (1)

Show private methods Implementation detail — not part of the public API.

Used by

Included by (2)

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close