2016-06-01 5 views
1

ここで簡単な質問 私は私のアプリがで展開されているものの環境に基づいて私のコントローラ内の変数を定義しようとしている。具体的には、私は名前に任意の文字列または部分文字列で製品を検索します私の開発者でSQLのLIKEを使用しています。環境、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? 'で十分です。私はここにエラーは表示されませんが、私のenvで 'ilike'を実行しようとすると、その拡張機能をインストールしていないのでエラーがスローされます...インストールしましたか? –

+0

Aha、これはうまくいくと思うけど、もしRails.env == "開発"の代わりに建設をしていたのですが、それが働いてから最初に試しました。興味深いことに、私は拡張機能をインストールする必要はありませんでした。私はherokuに展開しているので、おそらくサポートされていますか?私はそれをさらに調べ、回答を投稿します。ありがとう – Keenanp

答えて

2

問題は、それが開発モードである場合は、Railsのを求めているということであるとRailsをあなたに応答します(「開発」の異なる)真

irb> Rails.env.development?あなたは何ができるか =>真

は、それが文字列 "開発"

のirb> Rails.env => "開発"

に等しくなりますのでRails.env後に開発を削除していますRails.env.development以来、文字列「開発」と比較する部分を削除するだけですか?ブール

+0

ありがとうRantelo、私はあなたの言ったことについて考えて、このように更新: 'def index // if Rails.env ==" development "// name_env =" name LIKE? "他に// // name_env = "名前のiLikeの?" // end // if params [:q] // search_term = params [:q] // @products = Product。// end' 場所(name_env、 "%#{SEARCH_TERM}%")// 他に// @products = Product.all // 終わりそれは完璧に動作します。再度ありがとう(コメントに改行を追加する方法がわからない) – Keenanp

1

あなたのコードを持ついくつかの問題があります:偽/ Rails.env.development?リターンが真の理由

  • Rails.env.development? == "development"が、私はそれがRails.env.development?されるべきだと思う、正しくないすでに
  • クエリ文字列は、「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

ああ私は、Rails.env.development参照してください?ブール値です。私は確信が持てませんでした。残念ながらまだ機能していませんが、コードを投稿します。おかげで – Keenanp

0

Rails.env.developmentを返しますか? == "開発"はRails.env.developmentとして開発中に間違いでしょうか?あなたは `Rails.env.developmentを依頼する必要はありません