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 № 1Il 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 essereRails.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