スコープ with join on :has_many :through association
質問
class Users < ActiveRecord::Base
has_many :meetings, :through => :meeting_participations
has_many :meeting_participations
end
class Meetings < ActiveRecord::Base
has_many :users, :through => :meeting_participations
has_many :meeting_participations
end
class MeetingParticipations < ActiveRecord::Base
belongs_to :user
belongs_to :meeting
scope :hidden, where(:hidden => true)
scope :visible, where(:hidden => false)
end
hidden
は、m2m association テーブルに追加された boolean カラムです。与えられたいくつかの
Users
インスタンス
current_user
を行いたい。
current_user.meetings.visible
のコレクションを取得します。
Meetings
のコレクションを取得し、そのユーザが参加者である場合
hidden
カラムが
false
. 私が得た最も近い方法は、次のスコープを
Meetings
クラス
scope :visible, joins(:meeting_participations) & MeetingParticipation.visible
は
scope
をフィルタリングします。
Meetings
に対して
MeetingParticipations
テーブルに対するジョインやコンディションはありません。
MeetingParticipations
テーブルに関連する
current_user
.
これの問題点は、もし
current_user
と
another_user
はともに、ある
Meetings
インスタンス、つまり
Meetings
を持つ参加者ごとに結果セットのレコードが返されます。
hidden
に設定されている
false
. もし
current_user
があれば
true
に設定されています。
hidden
すべて
Meetings
であれば
another_user
が同じ会議の参加者で
hidden
に設定されている
false
は、それらの
Meetings
の中に表示されます。
Meetings.visible
の結果セットに表示されます。
に適切に結合する、上に述べたようなスコープを持つことは可能でしょうか?
User
インスタンスに適切に結合することは可能でしょうか?そうでない場合、どなたかこれに対する解決策を紹介していただけませんか?
どのように解決するには?
これは、あなたの問題に対する私の解決策です。
class User < ActiveRecord::Base
has_many :meeting_participations
has_many :meetings, :through => :meeting_participations do
def visible
where("meeting_participations.visible = ?", true)
end
end
end
@user.meetings.visible
関連
-
[解決済み】Bundler: コマンドが見つからない
-
[解決済み】ActionController::InvalidAuthenticityTokenについて
-
[解決済み] Errno::EACCESS: パーミッションが拒否された @ dir_s_mkdir
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜ?
-
[解決済み] Ruby: public static メソッドを作るには?
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] rails consoleを起動するとRailsのイニシャライザーが呼ばれる?
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある
-
[解決済み] ActionController::RoutingError: 初期化されていない定数MicropostsController
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bundle installが "Could not locate Gemfile "を返す。
-
[解決済み】TypeError: SymbolからIntegerへの暗黙の変換がない。
-
[解決済み] サーバーに接続できませんでした。そのようなファイルまたはディレクトリがありません (PG::ConnectionBad)
-
[解決済み] heroku open - no app specified
-
[解決済み] AWS S3です。アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレスされている必要があります。
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] rspecにおけるassignsの意味
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] Ruby on rails アプリで ES6 (ES2015) を使用するにはどうすればよいですか?
-
[解決済み] Heroku Error R14 (Memory quota exceeded): How do I solve this?