2016-10-02 6 views
0

Ich schaffe eine App, wo Nutzer ihre Namen eingeben können, die als chemische Symbole zurückgegeben werden (wenn passend).Wie transformiert man eine Benutzereingabe in Schienen 4?

So gelang es mir, wie in der Konsole zu tun:

symbols = { 
"ac" => "Ac", 
"al" => "Al", 
"am" => "Al", 
"br" => "Br", 
"ba" => "Ba", 
"cr" => "Cr" 
} 

puts "Get your chemical name!" 
name = gets.chomp 
name.gsub!(/#{symbols.keys.join('|')}/, symbols) 
puts name 

Jetzt würde ich es in der App arbeitet gerne machen, aber ich weiß nicht, wie die Methode zu schaffen? Ich will es nur in den Ansichten angezeigt werden/show

= @convertor.name 

= link_to 'Edit', edit_convertor_path(@convertor) 
= link_to 'Back', convertors_path 

werde ich die Methode in meinem Modell erstellen oder sonst wo?

class Convertor < ActiveRecord::Base 
    def get_chemical_name(name) 
    symbols = { 
    "ac" => "Ac", 
    "al" => "Al", 
    "am" => "Al", 
    "br" => "Br", 
    "ba" => "Ba", 
    "cr" => "Cr" 
    } 
    name.gsub!(/#{symbols.keys.join('|')}/, symbols) 
    puts name 
    end 
end 

so meiner Meinung nach versuchten showi so etwas wie [email protected]_chemical(name) aber erfolglos .. ich brauche Ihre Hilfe bitte

+0

Sie Ihre 'symbols' Hash aus einer früheren Antwort blind kopiert, aber vernachlässigten die' „am“ => „Al“ 'Tippfehler aus dieser Antwort zu beheben. Sie würden auch besser mit 'Regexp.union sein (symbols.keys)', String-Interpolation für Ihre regex Gebäude ist mit diesen Schlüsseln in Ordnung, aber schlechte Gewohnheiten sind schlechte Gewohnheiten. –

Antwort

1

Ja, kann das Verfahren im Modell bleiben.

Kurz ein:

@convertor.get_chemical(@convertor.name) 

funktionieren würde, aber dies ist nicht ein richtiger Weg, das zu tun.

Korrekter Weg wäre, die Methode in Convertor Klasse zu ändern, keine Argumente zu akzeptieren, da es eine Instanzmethode ist und es bereits Zugriff auf name Attribut hat. Also, nach

def get_chemical_name 
    symbols = { 
     "ac" => "Ac", 
     "al" => "Al", 
     "am" => "Al", 
     "br" => "Br", 
     "ba" => "Ba", 
     "cr" => "Cr" 
    } 
    name.gsub!(/#{symbols.keys.join('|')}/, symbols) 
    end 

die Methodensignatur ändern, werden Sie in der Lage sein

[email protected]_chemical_name 

auch zu verwenden, entfernte ich nutzlos puts name aus der Methodendefinition - in Ruby die letzte ausgewertet Linie ist bereits ein Rückgabewert von die Methode (außer return ed vor dem Ende der Methode).

Auch, wenn durch Zufall Sie die symbols Hash verwenden anderswo, können Sie es zu konstanten bewegen.

+0

ahhhh cool war ich nicht so weit! danke für Ihre Hilfe ! sehr geschätzt :) ich später mit anderen Fragen kommen kann (Ich werde die Bilder auf den „Symbole“ anhängen) –