W mojej aplikacji Railsowej zdefiniowałem następujące elementy:
module Selecting
module Execution
class ExecuteSpecific
def self.perform!
input = Data::FetchData.new.perform_action(param1, params2)
Aby kod był bardziej ogólny, chcę usunąć określone wywołanie metody z funkcji i przekształcić je w plik YAML jako taki:
:Newname:
- example: "Data::FetchData.new.perform_action(param1, params2)"
i refaktoryzuj powyższe do („nazwa” powinna być przekazana jako symbol):
module Selecting
module Execution
class ExecuteSpecific
def self.perform! name
new = YAML.load_file("path/to/file.yml")[name]
input = new[:example]
Ten zwrot a
TypeError: brak niejawnej konwersji symbolu na liczbę całkowitą
Jak można to naprawić?
Odpowiedzi:
1 dla odpowiedzi № 1Ten błąd oznacza, że używasz symbolu, w którym oczekuje się liczby całkowitej. Jedyne miejsce, w którym to robisz, to miejsce, do którego dzwonisz new[:example]
. Yaml.load_file
zwraca tablicę ciągów, a nie symboli, więc jeśli uzyskasz dostęp do dokumentu załadowanego yaml za pomocą indeksu ciągów zamiast symbolu, który powinien rozwiązać problem.
Na przykład. input = new["example"]