attach body id to newest unmodeled item species names

This commit is contained in:
Emi Matchu 2014-01-01 10:15:58 -05:00
parent 1b0a636fab
commit 99b2acd419
3 changed files with 34 additions and 23 deletions

View file

@ -55,12 +55,15 @@ class OutfitsController < ApplicationController
@newest_unmodeled_items_predicted_missing_species_by_color = {} @newest_unmodeled_items_predicted_missing_species_by_color = {}
@newest_unmodeled_items_predicted_modeled_ratio = {} @newest_unmodeled_items_predicted_modeled_ratio = {}
@newest_unmodeled_items.each do |item| @newest_unmodeled_items.each do |item|
h = item.predicted_missing_nonstandard_body_species_by_color( h = item.predicted_missing_nonstandard_body_ids_by_species_by_color(
Color.includes(:translations).select([:id]), Color.includes(:translations).select([:id]),
Species.includes(:translations).select([:id])) Species.includes(:translations).select([:id]))
standard_species = item.predicted_missing_standard_body_species. standard_body_ids_by_species = item.
select([:id]).includes(:translations) predicted_missing_standard_body_ids_by_species(
h[:standard] = standard_species if standard_species.present? Species.select([:id]).includes(:translations))
if standard_body_ids_by_species.present?
h[:standard] = standard_body_ids_by_species
end
@newest_unmodeled_items_predicted_missing_species_by_color[item] = h @newest_unmodeled_items_predicted_missing_species_by_color[item] = h
@newest_unmodeled_items_predicted_modeled_ratio[item] = item.predicted_modeled_ratio @newest_unmodeled_items_predicted_modeled_ratio[item] = item.predicted_modeled_ratio
end end

View file

@ -57,8 +57,8 @@ module OutfitsHelper
def render_predicted_missing_species_by_color(species_by_color) def render_predicted_missing_species_by_color(species_by_color)
key_prefix = 'outfits.new.newest_items.unmodeled.content' key_prefix = 'outfits.new.newest_items.unmodeled.content'
# Transform the Color => Array<Species> map into an Array<Pair<Color's # Transform the Color => (Species => Int) map into an Array<Pair<Color's
# human name (empty if standard), Array<Species>>>. # human name (empty if standard), (Species => Int)>>.
standard = species_by_color.delete(:standard) standard = species_by_color.delete(:standard)
sorted_pairs = species_by_color.to_a.map { |k, v| [k.human_name, v] }. sorted_pairs = species_by_color.to_a.map { |k, v| [k.human_name, v] }.
sort_by { |k, v| k } sort_by { |k, v| k }
@ -66,14 +66,18 @@ module OutfitsHelper
species_by_color[:standard] = standard # undo parameter mutation species_by_color[:standard] = standard # undo parameter mutation
first = true first = true
contents = sorted_pairs.map { |color_human_name, species| contents = sorted_pairs.map { |color_human_name, body_ids_by_species|
species_list = species.map(&:human_name).sort.to_sentence( species_list = body_ids_by_species.keys.sort_by(&:human_name).map { |species|
body_id = body_ids_by_species[species]
content_tag(:span, species.human_name, 'data-body-id' => body_id)
}.to_sentence(
words_connector: t("#{key_prefix}.species_list.words_connector"), words_connector: t("#{key_prefix}.species_list.words_connector"),
two_words_connector: t("#{key_prefix}.species_list.two_words_connector"), two_words_connector: t("#{key_prefix}.species_list.two_words_connector"),
last_word_connector: t("#{key_prefix}.species_list.last_word_connector")) last_word_connector: t("#{key_prefix}.species_list.last_word_connector")
)
key = first ? 'first' : 'other' key = first ? 'first' : 'other'
content = t("#{key_prefix}.body.#{key}", color: color_human_name, content = t("#{key_prefix}.body.#{key}", color: color_human_name,
species_list: species_list) species_list: species_list).html_safe
first = false first = false
content content
} }

View file

@ -259,16 +259,20 @@ class Item < ActiveRecord::Base
@predicted_missing_body_ids ||= predicted_body_ids - modeled_body_ids @predicted_missing_body_ids ||= predicted_body_ids - modeled_body_ids
end end
def predicted_missing_standard_body_species_ids def predicted_missing_standard_body_ids_by_species_id
PetType.select('DISTINCT species_id'). @predicted_missing_standard_body_ids_by_species_id ||=
joins(:color). PetType.select('DISTINCT body_id, species_id').
where(body_id: predicted_missing_body_ids, joins(:color).
colors: {standard: true}). where(body_id: predicted_missing_body_ids,
map(&:species_id) colors: {standard: true}).
inject({}) { |h, pt| h[pt.species_id] = pt.body_id; h }
end end
def predicted_missing_standard_body_species def predicted_missing_standard_body_ids_by_species(species_scope=Species.scoped)
Species.where(id: predicted_missing_standard_body_species_ids) species = species_scope.where(id: predicted_missing_standard_body_ids_by_species_id.keys)
species_by_id = species.inject({}) { |h, s| h[s.id] = s; h }
predicted_missing_standard_body_ids_by_species_id.inject({}) { |h, (sid, bid)|
h[species_by_id[sid]] = bid; h }
end end
def predicted_missing_nonstandard_body_pet_types def predicted_missing_nonstandard_body_pet_types
@ -277,7 +281,7 @@ class Item < ActiveRecord::Base
colors: {standard: false}) colors: {standard: false})
end end
def predicted_missing_nonstandard_body_species_by_color(colors_scope=Color.scoped, species_scope=Species.scoped) def predicted_missing_nonstandard_body_ids_by_species_by_color(colors_scope=Color.scoped, species_scope=Species.scoped)
pet_types = predicted_missing_nonstandard_body_pet_types pet_types = predicted_missing_nonstandard_body_pet_types
species_by_id = {} species_by_id = {}
@ -290,13 +294,13 @@ class Item < ActiveRecord::Base
colors_by_id[color.id] = color colors_by_id[color.id] = color
end end
species_by_color = {} body_ids_by_species_by_color = {}
pet_types.each do |pt| pet_types.each do |pt|
color = colors_by_id[pt.color_id] color = colors_by_id[pt.color_id]
species_by_color[color] ||= [] body_ids_by_species_by_color[color] ||= {}
species_by_color[color] << species_by_id[pt.species_id] body_ids_by_species_by_color[color][species_by_id[pt.species_id]] = pt.body_id
end end
species_by_color body_ids_by_species_by_color
end end
def predicted_fully_modeled? def predicted_fully_modeled?