2016-06-01 8 views
1

Простой вопрос здесь Я пытаюсь определить переменную в своем контроллере на основе какой среды развертывается мое приложение. В частности, я хочу искать продукты по любой строке или частичной строке в имени , используя термин SQL LIKE в моем dev. окружающей среды и iLIKE в производственной среде.Действия контроллера, зависящие от среды

Это то, что у меня есть, но я столкнулся с неправильной ошибкой оператора. Я довольно зеленый с рубинами и рельсами, поэтому я думаю, что это может быть синтаксическая ошибка. Мысли?

Спасибо!

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 
+0

вам не нужно спрашивать 'Rails.env.development? == "development" ',' Rails.env.development? 'достаточно. Я не вижу никаких ошибок здесь, но, пытаясь, что 'ilike' на моем env выдает ошибку, потому что у меня нет установленного расширения ... у вас он установлен? –

+0

Ага, я думаю, что это сработает, но я пошел с конструкцией «if Rails.env ==», потому что это сработало, и я сначала попробовал. Интересно, мне не нужно было устанавливать расширение. Я развертываю на герою, так что, возможно, это поддерживается? Я рассмотрю его больше и опубликую ответ. Спасибо – Keenanp

ответ

2

Проблема заключается в том, что вы спрашиваете Rails, если он находится в режиме разработки и Rails отвечает вам истинный (который отличается от «развития»)

irb> Rails.env.development? => верно

Что вы можете сделать, это удалить развитие после Rails.env так будет равна струнный "развитие"

IRB> Rails.env => "развитие"

Или просто удалите часть, где вы сравниваете строку с «развитием» с Rails.env.development? возвращает Boolean

+0

Спасибо Rantelo, я подумал о том, что вы сказали, и обновил его так: 'def index // if Rails.env ==" development "// name_env =" name LIKE? " // else // name_env = "name ilike?" // end // if params [: q] // search_term = params [: q] // @products = Продукт.где (name_env, "% # {search_term}%") // else // @products = Product.all // end // end' Он отлично работает. Еще раз спасибо (sry не уверен, как добавить разрывы строк в комментариях) – Keenanp

1

Есть некоторые проблемы с вашим кодом:

  • Rails.env.development? == "development" не правильно, я думаю, что это должно быть Rails.env.development?, потому что Rails.env.development? возвращает истинное/ложное уже
  • The Строка запроса будет «name LIKE»%?% '», потому что, если просто использовать` имя 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

Мне нравится ваша конструкция 'if/else'. :) – developer033

+0

Ahh Я вижу, Rails.env.development? является булевым. Я не был уверен. К сожалению, он до сих пор не работает, но я отправлю код, когда он есть. Спасибо – Keenanp

0

Rails.env.development? == «разработка» была бы ложной в развитии как Rails.env.development? было бы правдой в разработке

Смежные вопросы