如何在rails 4中转换用户输入?

我正在创建一个应用程序,用户可以在其中输入将作为化学符号返回的名称(匹配时)。

所以我设法在控制台中做了:

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 

现在我想让它在应用程序中工作,但我不知道如何创建该方法? 我希望它只在views / show中显示

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

我应该在我的模型中创建方法还是在哪里?

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

所以在我看来showI尝试了类似=@convertor.get_chemical(name)东西,但不成功……我需要你的帮助

是的,该方法可以保留在模型中。

短一点:

 @convertor.get_chemical(@convertor.name) 

会工作,但这不是一个正确的方法。

正确的方法是将Convertor类中的方法更改为不接受任何参数,因为它是一个实例方法,并且它已经可以访问name属性。 所以,更改方法签名后

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

你将能够使用

 =@convertor.get_chemical_name 

此外,我从方法定义中删除了无用的puts name – 在Ruby中,最后一个评估的行已经是方法的返回值(除非在方法结束之前return ed)。

此外,如果您在任何其他地方使用symbols哈希,您可以将其移动到常量。