notebook/app/views/content/contexts/_relation.html.erb
2017-03-30 19:52:28 +01:00

53 lines
1.7 KiB
Plaintext

<%# Usage:
render partial: 'content/contexts/relation', locals: {
content_type: Location,
content: some_location_to_find_leaders_of,
relation_class: LocationLeadership,
relation_class_id: :leader_id,
relation_text: :leader_of
}
Note: Initializes/appends to @references[content_type]
%>
<%
string_content_type = content_type.to_s.downcase
references_key = string_content_type.pluralize.to_sym
pretty_relation_text = relation_text.to_s.titleize.downcase
@references ||= {}
@references[references_key] ||= []
%>
<%# .joins(:item).where('items.privacy' => ['public']) also works, but doesn't include current_user check %>
<%
relations = relation_class.where("#{relation_class_id}": content.id)
.map { |content| content.send(string_content_type) }
.select { |content| content && content.readable_by?(current_user || User.new) }
%>
<%
if relations.count == 1
# pretty_relation_text.gsub!('<plural>', '')
# pretty_relation_text.strip!
# pretty_relation_text[0] = pretty_relation_text[0].upcase
@references[references_key] << [pretty_relation_text, relations.first]
elsif relations.count > 1
if pretty_relation_text.include? '<plural>'
pretty_relation_text.gsub!('<plural>', pluralize(relations.count, string_content_type))
else
pretty_relation_text = "#{pretty_relation_text} #{pluralize(relations.count, string_content_type)}"
end
pretty_relation_text[0] = pretty_relation_text[0].upcase
%>
<div class="col s12 m6 l4">
<%= render partial: 'content/cards/in_universe_content_list', locals: {
content_type: content_type.to_s.downcase,
content_list: relations,
card_title: pretty_relation_text
} %>
</div>
<% end %>