/ / Działania sterownika zależne od środowiska - ruby-on-rails, ruby

Działania kontrolera zależne od środowiska - ruby-on-rails, ruby

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 № 1

Problem 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?, bo Rails.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