You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Jan 2, 2020. It is now read-only.
I've been working on adding better support to attrtastic for attributes that are ActiveRecord associations. Currently, attrtastic just calls .to_s on them, and you end up with something like #<Post:0x007f893f477a78>.
Here are the relevant pieces of an app to illustrate what I'm talking about.
Attrtastic.default_options.merge!(# If an attribute is an ActiveRecord itself, check for any of these columns# to print it's value. Otherwise, fallback to .to_sactive_record_name_columns: [:full_name,:name,:title])moduleAttrtasticclassSemanticAttributesBuilderdefformat_attribute_value_custom(value)opts=Attrtastic.default_options.fetch(:active_record_name_columns,[:name])casevaluewhenActiveRecord::Baseifmeth=opts.find{ |m| value.respond_to?(m)}value.send(meth).to_selse"#{value.class.name.humanize} ##{value.id}"endelseformat_attribute_value_defaultvalueendendalias_method:format_attribute_value_default,:format_attribute_valuealias_method:format_attribute_value,:format_attribute_value_customendend
If that's something you think might be useful for other users, I'd be happy to clean it up and submit a proper patch.
The text was updated successfully, but these errors were encountered:
First: I don't want to depend on ActiveRecord (Attrtastic doesn't depend on ActiveRecord, you can pass POROs),
Second: if you don't provide sane to_s for your objects, then you have similar problem with link_to helper and other ways where you output your associated object (you have to pass method name instead of defaulting on to_s).
You can archive the same with either:
:format option, when you provide proper formatter for value, i.e:
def ar_formatter(object)
method_name = %w( full_name name ).find {|m| object.respond_to?(:m) }
object.send(method_name || "to_s")
end
:value option, where you can provide symbol used as method name to retrieve value from object
Of course you can combine both of these, Attrtastic first applies :value if it's present to retrieve actual value of attribute and then it is formatted according to :format option (it can be false to no format at all an only call to_s, or is formatted with some defaults)
Sign up for freeto subscribe to this conversation on GitHub.
Already have an account?
Sign in.
I've been working on adding better support to attrtastic for attributes that are ActiveRecord associations. Currently, attrtastic just calls
.to_s
on them, and you end up with something like#<Post:0x007f893f477a78>
.Here are the relevant pieces of an app to illustrate what I'm talking about.
Given the following models/associations:
and given this ERB:
My changes would generate this HTML:
Here's the code that provides this behavior:
If that's something you think might be useful for other users, I'd be happy to clean it up and submit a proper patch.
The text was updated successfully, but these errors were encountered: