控制器操作依赖于环境

时间:2016-06-01 02:59:42

标签: ruby-on-rails ruby

这里有一个简单的问题 我正在尝试根据我的应用程序部署的环境在我的控制器中定义一个变量。具体来说,我想通过名称中的任何字符串或部分字符串搜索产品,在我的开发中使用SQL术语LIKE。生产环境中的环境和iLIKE。

这就是我所拥有的,但我遇到了无效的语句错误。我对ruby和rails非常环保,所以我认为这可能是语法错误。想法?

谢谢!

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

3 个答案:

答案 0 :(得分:2)

问题是你问Rails它是否处于开发模式而Rails用true响应(这与“开发”不同)

IRB> Rails.env.development?  =>真的

你可以做的是在Rails.env之后删除开发,这样它就等于String“development”

IRB> Rails.env  => “发展”

或者只是删除自Rails.env.development以来与字符串“开发”比较的部分?返回一个布尔

答案 1 :(得分:1)

您的代码存在一些问题:

  • Rails.env.development? == "development"不正确,我认为它应该是Rails.env.development?,因为Rails.env.development?已经返回true / false
  • 查询字符串将是"名称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

答案 2 :(得分:0)

Rails.env.development? ==“开发”在Rails.env.development开发中会是错误的吗?在开发中会是真的