0

私はRailsにかなり慣れていません。私がぶつかっている問題は、次のように説明されています。

まず、家のあるテーブルがあります。家には、has_many:datesに関連付けられた複数の日付があります

次に、日付の表があります。日付には関連付けがありますbelongs_to:house

これで、検索で、ユーザーは開始日と終了日を選択できます。そして、私がやりたいのは、各家の日付を検索し、これらが開始日と終了日の間にあるかどうかを確認することです。1つ以上の日付が開始日/終了日内にある場合は、それを見つける必要があります。

これらは他の基準のために家を検索するための私の条件です:

parameters.push( [ params[:house_category_id], "houses.house_category_id = ?" ] );
parameters.push( [ params[:province_id], "houses.province_id = ?" ] );

これらのパラメーターを使用して有効な条件を作成するメソッドを作成しました。

説明が少し難しいので、はっきりしない場合は教えてください。

これを検索してみましたが、答えのあるページを除いて、他のすべてのページにたどり着きました。

ありがとう

4

2 に答える 2

1

私があなたの問題を正しく理解しているかどうかはわかりませんが、私が理解したことによれば、以下を使用して望ましい結果を得ることができます。

res = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date < '2011-01-12' AND dates.date > '2011-01-11'")

ここで、「2011-01-12」および「2011-01-11」はユーザーが選択した日付です。

これがあなたが探していたものであるかどうかを私に知らせてください、または詳細を投稿してください。

于 2011-01-12T10:47:08.267 に答える
0

今、別の質問が頭に浮かびますが、それが可能かどうかはわかりません。この状況の開始から終了までを忘れた場合、次のようにこの種の関連付けを確認できる可能性はありますか。

家には2つの日付が付いています。

ユーザーが2つの日付を選択します。

今、私はこれらの2つの日付が両方とも一致する場合にのみ家を選択したいと思います。

このような:

@houses = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date = '2011-01-12' AND dates.date = '2011-01-11'")

上記のコードを試して、次のようなSQLを取得しました。

SELECT distinct houses.* FROM `houses` INNER JOIN dates ON dates.house_id = houses.id WHERE (dates.date = '2011-01-15' AND dates.date = '2011-01-22')

しかし、それは機能していないようです。これは、単一のクエリまたは単一のfind()でまったく可能ですか?

于 2011-01-12T16:13:10.850 に答える