HTML attributes
Using the html option you can attach style, classes, and data attributes. The style attribute adds the style tag to your element, classes adds the class tag, and the data attribute the data tag to the element you choose.
Pass the style and classes attributes as strings, and the data attribute a Hash.
field :name, as: :text, html: {
edit: {
wrapper: {
style: "background: red; text: white;" # string
classes: "absolute h-[41px] w-full" # string
data: {
action: "input->resource-edit#toggle",
resource_edit_toggle_target_param: "skills_tags_wrapper",
} # Hash
}
}
}Declare the fields from the outside in
When you add these attributes, you need to think from the outside in. So first the view (index, show, or edit), next the element to which you add the attribute (wrapper, label, content or input), and then the attribute style, classes, or data.
The edit value will be used for both the Edit and New views.
There are two notations through which you can attach the attributes; object or block notation.
The object notation
This is the simplest way of attaching the attribute. You usually use this when you want to add static content and params.
field :has_skills,
as: :boolean,
html: {
edit: {
wrapper: {
classes: "hidden"
}
}
}In this example, we're adding the hidden class to the field wrapper on the Edit and New views.
The block notation
You can use the' block' notation if you need to do a more complex transformation to add your attributes. You'll have access to the params, current_user, record, and resource variables. It's handy in multi-tenancy scenarios and when you need to scope out the information across accounts.
field :has_skills,
as: :boolean,
html: -> do
edit do
wrapper do
classes do
"hidden"
end
data do
if current_user.admin?
{
action: "click->admin#do_something_admin"
}
else
{
record: record,
resource: resource,
}
end
end
end
end
endFor the data, style, and classes options, you may use the method notation alongside the block notation for simplicity.
field :has_skills,
as: :boolean,
html: -> do
edit do
wrapper do
classes("hidden")
data({action: "click->admin#do_something_admin"})
end
end
endWhere are the attributes added?
You can add attributes to the wrapper element for the index, show, or edit blocks.
-> Index field wrapper
field :name, as: :text, html: {
index: {
wrapper: {}
}
}
-> Show field wrapper
field :name, as: :text, html: {
show: {
wrapper: {}
}
}
-> Show label target
field :name, as: :text, html: {
show: {
label: {}
}
}
-> Show content target
field :name, as: :text, html: {
show: {
content: {}
}
}
-> Edit field wrapper
field :name, as: :text, html: {
edit: {
wrapper: {}
}
}
-> Edit label target
field :name, as: :text, html: {
edit: {
label: {}
}
}
-> Edit content target
field :name, as: :text, html: {
edit: {
content: {}
}
}
-> Edit input target
field :name, as: :text, html: {
edit: {
input: {}
}
}
Friendly.rb - Your friendly European Ruby Conference