proste pytanie tutaj Próbuję zdefiniowaćzmienna w moim kontrolerze w zależności od środowiska, w którym jest wdrażana moja aplikacja. W szczególności chcę wyszukiwać produkty za pomocą dowolnego ciągu lub częściowego ciągu w nazwie, używając terminu SQL LIKE w moim dev. środowisko i iLIKE w środowisku produkcyjnym.
To jest to, co mam, ale mam błąd nieprawidłowej instrukcji. Jestem całkiem zielony z rubinem i szynami, więc myślę, że może to być błąd składniowy. Myśli?
Dzięki!
products_controller:
def index
if Rails.env.development? == "development"
name_env = "name LIKE ?"
else
name_env = "name ilike ?"
end
if params[:q]
search_term = params[:q]
@products = Product.where(name_env, "%#{search_term}%")
else
@products = Product.all
end
end
Odpowiedzi:
2 dla odpowiedzi № 1Problem polega na tym, że pytasz Railsy, czy jest on w trybie programistycznym, a Railsy odpowiadają prawdą (co różni się od "rozwoju")
irb> Rails.env.development? => prawda
Co możesz zrobić, to usunąć programowanie po Rails.env, aby był równy ciągowi "development"
irb> Rails.env => "rozwój"
Lub po prostu usunąć część, w której można porównać do "rozwoju" String od Rails.env.development? zwraca wartość logiczną
1 dla odpowiedzi nr 2
Występują pewne problemy z twoim kodem:
Rails.env.development? == "development"
nie jest poprawne, myślę, że tak powinno byćRails.env.development?
, boRails.env.development?
zwraca true / false już- Łańcuch zapytania będzie "name LIKE"%?% "", Ponieważ jeśli użyjesz `name LIKE?", To nie wystarczy!
Podsumowując, Twój kod byłby następujący:
def index
name_env = if Rails.env.development?
"name LIKE "%?%""
else
"name ilike "%?%""
end
search_term = params[:q]
@products = if search_term
Product.where(name_env, search_term)
else
Product.all
end
end
0 dla odpowiedzi № 3
Rails.env.development? == "rozwój" byłby fałszywy w rozwoju jako Rails.env.development? byłaby prawdziwa w rozwoju