#ruby-on-rails #ruby #ruby-on-rails-4
#ruby-on-rails #ruby #ruby-on-rails-4
Вопрос:
Я пытаюсь создать приложение, в котором пользователь мог бы преобразовать свое имя или слово с помощью химических элементов (например, логотип breaking bad). После нескольких вопросов здесь, попыток и долгих размышлений я понял, что нашел «идеальное» решение… (Хм, я надеюсь …)
Я бы хотел, чтобы, если я введу acalam для отображения следующего:
Если ни один символ не совпадает, я сохраняю начальную запись, чтобы она могла быть: hello => He ll O (жирный символ представляет существующие химические символы)
Моя модель выглядит так (пока всего пара символов)
class Convertor < ActiveRecord::Base
def get_chemical
symbols = {
"ac" => {
:chem_name => "Actinium",
:number => 89,
:symbol => "Ac",
:molar => 227
},
"al" => {
:chem_name => "Aluminium",
:number => 13,
:symbol => "Al",
:molar => 26.981539
},
"am" => {
:chem_name => "Americium",
:number => 95,
:symbol => "Am",
:molar => 243
}
}
#not sure how to use this
result=[]
symbols.each do |key, value|
value.each do |key2, value2|
result << value2
end
result
end
name.downcase.gsub!(Regexp.union(symbols.keys), symbols)
end
end
Это представление
.col-xs-12
.number
= @convertor.get_chemical # plus something?
.symbol
= @convertor.get_chemical # plus something?
.molar
= @convertor.get_chemical # plus something?
.chem_name
= @convertor.get_chemical # plus something?
На данный момент мое представление выглядит так: (
Редактировать
Это все химические символы, так что я должен сделать условие для каждого? Или есть лучший способ?
Комментарии:
1. С какой проблемой вы столкнулись?
2. Я не знаю, как извлечь нужные мне значения
Ответ №1:
Символы имеют длину один или два символа, верно? Вы должны решить, какой из двух символов вы собираетесь искать первым: скажем, 2 символа, затем 1.
Для «Привет»
Найдите в хэше следующую несопоставимую пару: Он, потому что это хэш, вам не нужно зацикливаться, просто спросите symbols.include? 'He'
, переходит ли, если да, к следующей непревзойденной паре. Если этого не произойдет, найдите только ‘H’ и повторите.
Появляется первая буква «l», и она не совпадает, «ll» тоже не совпадает, просто верните «l», то же самое со второй «l», и в итоге вы получите
Он л л О
Когда хэш содержит нужный вам символ, просто верните его:
lookup = 'He'
symbols[lookup]
symbols[lookup][:chem_name]
Комментарии:
1. Пожалуйста, посмотрите мое редактирование, я добавил таблицу символов. Символы также могут иметь 3 символа. Итак, я должен выполнить 103 разных условия?
2. Единственные химические символы, длина которых может составлять три символа, являются редкими и не составляют слово или имя; в них есть несколько слов / имен с символами с двойным U. Я бы проигнорировал эту возможность, по крайней мере, для первой реализации. Это слишком отдаленная возможность.
3. ваше право, но я посмотрю, включу ли я их, потому что некоторые люди могут играть, набирая дерьмовые вещи, хе-хе
4. Не 103 разных условия, но все символы должны быть в хэше. Затем вы просто запрашиваете хэш до 3 раз:
symbols.include? 'Hel'
,symbols.include? 'He'
иsymbols.include? 'H'
если вы не нашли результат в первых двух. Давайте не будем обновлять мой ответ, пока мы не выясним два, добавив 3 ответа с символами, после этого момента тривиально.