質問

私は Rails を初めて使用するのですが、私が直面している問題は次のとおりです。

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

2 番目に日付のテーブルがあります。日付には、belongs_to :house という関連付けがあります。

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

他の基準で家を探すための私の条件は次のとおりです。

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

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

説明するのが少し難しいため、十分に明確でない場合は教えてください。

これを検索しようとしましたが、答えのあるページ以外のあらゆる種類のページにたどり着きました。

ありがとう

役に立ちましたか?

解決

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

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'は、ユーザーが選択した日付です。

これがあなたが探していたものであるか、詳細を投稿しているかどうかを教えてください。

他のヒント

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

ハウスには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() で可能でしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top