/ / Azioni del controller dipendenti dall'ambiente: ruby-on-rails, ruby

Le azioni del controller dipendono dall'ambiente: ruby-on-rails, ruby

semplice domanda qui Sto cercando di definire avariabile nel mio controller in base all'ambiente in cui è distribuita la mia app. In particolare, voglio cercare prodotti per qualsiasi stringa o stringa parziale nel nome, usando il termine SQL LIKE nel mio sviluppatore. ambiente e iLIKE nell'ambiente di produzione.

Questo è quello che ho, ma sto riscontrando un errore di dichiarazione non valido. Sono abbastanza verde con rubino e rotaie, quindi penso che possa essere un errore di sintassi. Pensieri?

Grazie!

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

risposte:

2 per risposta № 1

Il problema è che stai chiedendo a Rails se è in modalità di sviluppo e Rails ti risponde con true (che è diverso da "sviluppo")

irb> Rails.env.development? => vero

Quello che potresti fare è rimuovere lo sviluppo dopo Rails.env in modo che sia uguale allo "sviluppo" della stringa

irb> Rails.env => "sviluppo"

O semplicemente rimuovere la parte in cui si confronta con lo "sviluppo" della stringa da Rails.env.development? restituisce un valore booleano


1 per risposta № 2

Ci sono alcuni problemi con il tuo codice:

  • Rails.env.development? == "development" non è corretto, penso che dovrebbe essere Rails.env.development?, perché Rails.env.development? restituisce già vero / falso
  • La stringa di query sarà "name LIKE"%?% "", Perché se usi solo `name LIKE?", Non è abbastanza!

In sintesi, il tuo codice sarebbe:

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 per risposta № 3

Rails.env.development? == "sviluppo" sarebbe falso nello sviluppo come Rails.env.development? sarebbe vero nello sviluppo