/ / Дії контролера залежно від навколишнього середовища - рубін на рейках, рубін

Діяльність контролера залежить від навколишнього середовища - рубін на рейках, рубій

тут просте запитання Я намагаюся визначити 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? було б правдою в розвитку