Il s'agit de la sorte de crazy et un peu difficile à expliquer.
Essentiellement, j'ai une table de clients et une table de métadonnées.
+-----------+ +-------------+
| Customers | | Metadata |
+-----------+ +-------------+
| id | | id |
| name | | customer_id |
+-----------+ | key |
| value |
+-------------+
- +-----------+ +-------------+
- | Customers | | Metadata |
- +-----------+ +-------------+
- | id | | id |
- | name | | customer_id |
- +-----------+ | key |
- | value |
- +-------------+
Les données pour les champs sont fournies par une API qui répond avec json. Chaque champ peut contenir plus d'une valeur, auquel cas ils seront séparés par une virgule.
Droit maintenant mon code pour briser les données ressemble un peu à ceci :
customer.each do |key,value|
if key == CN_CONFIG['primary_key']
#This is unique to all customers.
if value == nil || value == ""
# You have no name!!!!!!!
break
end
if customers.include?(value)
# This is an update
update_c = Customer.find_by_name(value)
customers.delete(value)
else
# This is a create
update_c = nil
customer_name = value
end
end
if !ignore_fields.include?(key)
if list_fields.include?(key)
if value.scan(/,/).size > 0
# We have a list
puts "key: #{key} -- #{value} "
value.split(',').each do |v|
data_set.push({:key=>key,:value=>v.to_s.downcase.strip})
puts " value: #{v.to_s.downcase.strip}"
end
else
data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
puts "key: #{key} | value: #{value.to_s.downcase.strip}"
end
else
data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
puts "key: #{key} | value: #{value.to_s.downcase.strip}"
end
end
end
- customer.each do |key,value|
- if key == CN_CONFIG['primary_key']
- #This is unique to all customers.
- if value == nil || value == ""
- # You have no name!!!!!!!
- break
- end
- if customers.include?(value)
- # This is an update
- update_c = Customer.find_by_name(value)
- customers.delete(value)
- else
- # This is a create
- update_c = nil
- customer_name = value
- end
- end
- if !ignore_fields.include?(key)
- if list_fields.include?(key)
- if value.scan(/,/).size > 0
- # We have a list
- puts "key: #{key} -- #{value} "
- value.split(',').each do |v|
- data_set.push({:key=>key,:value=>v.to_s.downcase.strip})
- puts " value: #{v.to_s.downcase.strip}"
- end
- else
- data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
- puts "key: #{key} | value: #{value.to_s.downcase.strip}"
- end
- else
- data_set.push({:key=>key,:value=>value.to_s.downcase.strip})
- puts "key: #{key} | value: #{value.to_s.downcase.strip}"
- end
- end
- end
Pas vraiment à important à la question si.
Quelle question est de savoir comment vous filtrer sur une table de données meta ?
Exemple de dire certaines des clés répertoriées dans le tableau de métadonnées sont : sexe, les birth_year, les frères et sœurs
Où :
sexe = >
m ou
fbirth_year = > (toute année aaaa)
frères et sœurs = > (un nom et chaque client peuvent avoir nombre infini)
(Btw ce n'est pas le données réelles lol)
Maintenant, ce que j'ai l'intention de le faire est groupe toutes les clés pour obtenir toutes les clés qui se manifestent dans la table de métadonnées. Ces tourner dans les ensembles de champs, toutes les valeurs de transforment des cases à cocher qui ont un menu select pour inclure ou exclure les critères.
Maintenant, comment écrire une requête pour retourner tous les clients qui satisfont aux critères ?