Ein Grund, meine hget
ist nicht finden oder einen Hash zurückgeben ich in einer öffentlichen Methode festgelegt. Ich kann nicht herausfinden warum.HGET in privaten Methode nicht zurückgeben Hash
Dies ist alles in einem Controller, der von ApplicationController
erbt, die, wo ich meine redis initializer definieren ist:
def redis
Thread.current[:redis] ||= Redis.new
end
Da ist in meinem Controller mache ich das den Hash zu setzen:
def return_customer
email = params["email"]
customer = Customer.find_by(email: email)
credit_amount = customer.credit_amount.to_f
customer_data = {email: email, customer_id: customer.id, credit_amount: credit_amount}
redis.hset("shop:#{customer.shop.id}:customer", customer_data, customer_data.inspect)
render json: customer
end
Dann habe ich schließlich diese private Methode, die ich in anderen Methoden in der gleichen Steuerung verwende, das ist der Teil, der nicht funktioniert:
private
def get_customer_from_redis
shop = Shop.find_by(shopify_domain: params["shop"])
customer_info = redis.hget("shop:#{shop.id}:customer", customer_data)
eval(customer_info)
end
Dies ist der Fehler, die
TypeError (no implicit conversion of nil into String):
Ja "inspect" ist ein sehr Ruby-spezifisches Formular und kann nicht einfach und sicher deserialisiert werden. JSON ist viel besser. – tadman
danke .. es funktioniert immer noch nicht .. Ich bekomme diesen Fehler .. "TypeError (keine implizite Umwandlung von Nil in String):" – ToddT
@ToddT Ich aktualisierte meine Antwort. Die Methode get_custom_from_redis wirft jetzt keinen Fehler, da customer_info null sein kann. Könnten Sie es bitte jetzt versuchen? – DjezzzL