0
My Railsプロジェクトには、イベントとの2つのクラスがあります。。イベントには多くのパッケージがあり、パッケージは1つのイベントに属します。パッケージの値が配列内のすべての文字列と一致する場合(Railsメソッドまたは未処理SQLのいずれか)にのみイベントを返すことができるかどうかは疑問です。私は現在、すべてのイベントを取得し、それぞれのループをいくつか検索してこれを達成しています。このループでは文字列を含む子オブジェクトの値に基づく親オブジェクトの検索
packages = ["beverage", "food"]
@events = Event.where('started_at >= ?', DateTime.now).order(started_at: :asc)
saved_events = []
@events.each do |event|
package_counter = 0
event.packages.each do |package|
if packages.include? package.kind
package_counter += 1
if saved_events.include? event
break
end
end
end
if package_counter == packages.length
saved_events.push(event)
end
end
@events = saved_events
、飲料のみのイベントと食品パッケージが返されます。飲み物のみ、または食品パッケージのみのイベントは返されません。 SQLクエリやActiveRecordメソッドで同じ結果を得ることが可能かどうか疑問に思っています。私は無駄に数時間のために研究してきました。
イベントのパッケージが@packagesと同じ順序でない場合を除き、これは機能します。これを修正するために、 '@ events.select {| event | (event.packages.map(&:kind)&@packages)== @packages} '行を作成して' @ events.select {| event | (event.packages.order(kind::asc).map(&:kind)&@packages)== @packages} ' –