тут просте запитання Я намагаюся визначити aзмінна в моєму контролері, залежно від того, в якому середовищі розгорнуто моє додаток. Зокрема, я хочу шукати продукти за будь-яким рядком або частковою рядкою в імені, використовуючи термін SQL LIKE у своєму розробнику. середовищі та iLIKE у виробничому середовищі.
Це те, що у мене є, але я зіткнувся з помилковою помилкою оператора. Я досить зелений з рубіном та рейками, тому я думаю, що це може бути помилка синтаксису. Думки?
Дякую!
Контролер продуктів:
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
Відповіді:
2 для відповіді № 1Проблема полягає в тому, що ви запитуєте Rails, чи він перебуває в режимі розробки, і Rails відповідає вам правдою (що відрізняється від "development")
irb> Rails.env.development? => правда
Що ви можете зробити, це видалити розробку після Rails.env, щоб вона була дорівнює рядку "development"
irb> Rails.env => "розвиток"
Або просто видаліть частину, в якій ви порівнюєте з "String" розробкою з Rails.env.development? повертає булевий
1 для відповіді № 2
У коді є деякі проблеми:
Rails.env.development? == "development"
невірно, я думаю, що так і має бутиRails.env.development?
, оскількиRails.env.development?
вже повертає правду / хибність- Рядок запиту буде "name LIKE"%?% "", Тому що якщо просто використовувати `name LIKE?", Цього недостатньо!
Підсумовуючи, ваш код буде:
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 для відповіді № 3
Rails.env.development? == "розвиток" буде хибним у розвитку як Rails.env.development? було б правдою в розвитку