2016-06-01 42 views
1

簡單的問題,在這裏 我想基於什麼樣的環境我的應用程序部署在定義在我的控制器中的變量。具體來說,我想通過名稱中的任何字符串或部分字符串搜索產品,在我的開發中使用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 
+0

你不需要問'Rails.env.development? ==「開發」,「Rails.env.development?」就足夠了。我在這裏沒有看到任何錯誤,但是,在我的env上嘗試'ilike'會拋出一個錯誤,因爲我沒有安裝該擴展名...您是否安裝了它? –

+0

啊哈,我認爲這會工作,但我去'如果Rails.env ==「發展」建設,而不是因爲它的工作,我先試了一下。有趣的是,我不必安裝擴展。我正在部署heroku,所以也許它支持?我會更多地研究它併發布答案。謝謝 – Keenanp

回答

2

的問題是,你問的Rails如果是在發展模式和Rails響應你真(這是「發展」的不同)

irb> Rails.env.development? =>真

你可以做的是去除Rails.env後的發展,這將是等於字符串 「發展」

IRB> Rails.env => 「發展」

或者從Rails.env.development中刪除與「開發」字符串比較的部分?返回布爾值

+0

感謝Rantelo,我想到了你說的並且更新它看起來像這樣: 'def index // if Rails.env ==「development」// name_env =「name LIKE?」 // else // name_env =「名稱ilike?」 // end // if params [:q] // search_term = params [:q] // @products = Product。其中(name_env,「%#{search_term}%」)// else // @products = Product.all // end // end' 它完美地工作。再次感謝(不知道如何在評論中添加換行符) – Keenanp

1

有一些問題與您的代碼:

  • Rails.env.development? == "development"是不正確的,我覺得應該是Rails.env.development?,因爲Rails.env.development?返回true /已假
  • 的查詢字符串將是「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

我喜歡你的'if/else'結構。 :) – developer033

+0

啊我看,Rails.env.development?是一個布爾值。我不確定。不幸的是,它仍然無法正常工作,但是我會在它發佈代碼時發佈。謝謝 – Keenanp

0

Rails.env.development? ==「開發」在Rails.env.development開發中會是錯誤的嗎?在開發中會是真的