1

Railsデータベースにクエリを実行し、結果をJSONとして返す方法を学習しようとしています。私の例では、パラメータ、都市、州を使用してデータをクエリしたいと思います。

これまでのところ、私のコントローラーでは、次のアクションが機能するようになっています。

  def state
    @bathrooms = Bathroom.where("state = ?" ,params[:state])
    respond_to do |format|
      format.json  { render :json => @bathrooms }
      format.js   { render :nothing => true } 

    end
  end

これは私のルーティングエントリでもあります。

  match '/bathrooms/state/:state',
              :controller => "bathrooms",
              :action => "state"

このリソースは、次のURLで呼び出すことができます。

http://localhost:3000/bathrooms/state/CA.json

それはすべて良いことですが、複数のパラメーターでクエリを実行する方法がわかりません。コントローラにAND句を追加するのは簡単なようです。

でも……どうしたらいいのかわからない

a。)ルーティングエントリを正しく記述しますか?b。)ブラウザでテストした場合のURLはどのようになりますか?

レーキルートを理解しようとしましたが、何かが足りないに違いありません。

誰かがアクションがどのように見えるべきかについての基本的な例を提供できますか?ルーティングエントリはどのようになり、リソースにアクセスするためのURLはどのようになりますか?

繰り返しになりますが、SQLで記述されている場合、これが返されたいものです。

SELECT * from bathrooms WHERE city='Chicago' AND state = 'IL'

助けていただければ幸いです。

4

2 に答える 2

1

すべてをルートで渡す必要はありません。URLはGETパラメータもサポートしています。これらは、URLの疑問符の後に通常表示されるパラメータです。GETルートを変更せずにこれらのパラメータを追加できますhttp://localhost:3000/bathrooms/state/IL.json?city=Chicago。次に、をcity介してパラメータにアクセスできますparams[:city]。しかし、あなたの場合は、を使用する方が良いと思いますhttp://localhost:3000/bathrooms/index.json?state=IL&city=Chicago。また、ルーティングを次のように変更する必要があります

match '/bathrooms/index',
    :controller=>:bathrooms,
    :action=>:index

indexのメソッドにコードを配置しますBathroomsController。同じようにパラメータにアクセスしますが、概念は異なります。州に入って都市ごとにバスルームを探すのではなく、州や都市ごとにバスルームを探すだけです。

とにかく、URLを手動で記述したくはありません。RailsヘルパーまたはHTMLフォームでURLを生成する必要があります。

link_to "bathroom in Chicago, IL",:controller=>:bathrooms,:action=>:index,:state=>'IL',:city=>'Chicago'

フォームを使用する場合(ユーザーが自分の州と都市を選択できるようにするため)、そのメソッドをGET次のように設定する必要があります。

form_tag {:controller=>:bathrooms,:action=>:index},:method=>:get do

と置くstatecityフィールドとして。

ANDSQLを使用して複数のフィールドで検索を実行できる一方で、whereメソッドをチェーンすることもできることにも注意してくださいBathroom.where(:state=>params[:state]).where(:city=>params[:city])

于 2012-04-16T20:38:41.867 に答える
0

クエリ文字列には任意のパラメータを入れることができます。

例えば:

http:// localhost:3000 / bathrooms / state / CA.json?city = Chicago

クエリは次のようになります。

@bathrooms = Bathroom.where("state = ? and city= ?" ,params[:state], params[:city])
于 2012-04-16T20:34:42.457 に答える