2016-11-15 11 views
1

配列の配列は[["2","3"], ["3","1"], ["6", "1"]]です。各サブアレイの最初の要素はユーザーIDであり、2番目の要素はユーザーがイベント用に予約した座席数です。 各ユーザーが自分のIDをアレイで見つけて自分の予約を閲覧できるようにしたい。私は2つのモデルがあるとしましょう:ユーザーとイベント。ユーザーコントローラーで@mybooking = Event.mybooking(current_user.id)のようなスコープを使用したいのですが、問題はイベントモデルに適切なスコープを書き込む方法です。 また、ユーザーが見つかった場合は、2番目の要素も使用したいと考えています。Rails:スコープを使って配列の配列内の要素を見つける方法

私は別のソリューションを試しましたが、うまくいかなかったのです!スコープを使用することができないと思っている場合や、別の種類のソリューションがある場合はお知らせください。

編集: 私はまだ機能するソリューションを待っているように、私は私がこのような何かを探していますことを言及する必要があります:

scope :mybookings, ->(id){where("reservations.to_enum.map{|n,m| n} ?", id)} 

または

scope :mybookings, ->(id) { where("reservations.map(&:first) ?", id) } 

これら二つのドン私は「....」の部分に関係するエラーのために仕事をしません。 そして、以下の解決策は真ではありません。ユーザーのコントローラーからイベントのスコープを呼び出すためです。この変数はイベントコントローラー用であるため、コントローラーでreservationsを使用することはできません。

+0

'スコープ:mybooking、 - >(current_user_id){USER_ID:current_user_id}' – mudasobwa

+0

それは本当ではない@mudasobwa!もう一度質問をチェックしてください! –

答えて

2
class Event 
    scope :mybooking, ->(user_ids) { where(user_id: user_ids) } 
end 

今では、コントローラで行うことが可能です:

reservations = [["2","3"], ["3","1"], ["6", "1"]] 
Event.mybooking(reservations.map(&:first)) 
+0

私はそれが動作するとは思わない! reservations = [["2"、 "3"]、["3"、 "1"]、["6"、 "1]]]のようになります。配列の最初のサブ要素? (2、3、6はユーザーIDです) –

+0

@AboozarRajabi編集を参照してください。最初の要素(id)で配列をマップし、得られた配列をスコープに渡します。それはあなたのために動作するかどうかを教えてください –

+0

ありがとうが、私はあなたがスコープにuser_idを渡す方法を理解していないのですか?別の問題は、他のコントローラの予約を使用しているため、エラーが発生すると思います。私はあなたがそれにアクセスできないと思う。 –

関連する問題