ユーザーには3つの役割があり、標準、プレミアム、管理者と呼ばれます。それぞれが投稿を投稿できます。プレミアムと管理者は私的ポストか非プライベートポスト(プライベート:偽かプライベートか)を選択することができます。標準ユーザーには、投稿が非公開/非公開になるかどうかを選択するオプションはありません。デフォルトでは、すべての標準ユーザーの投稿は非公開:nilステータスになります。Ruby on Rails三項演算子を表示するには、nilとfalseの両方が表示されます。
- 標準ユーザーの投稿は、常にプライベートになります:要約する
- プレミアム/ Adminユーザーの投稿nilは、民間のいずれかとすることができる:trueまたはプライベート:偽
私がしようとしています標準ユーザーがインデックスページを表示すると、プライベート:nilとプライベート:falseの投稿が表示され、プレミアムと管理者のユーザーはすべてを表示できます。私の問題は、私は、標準ユーザーが非公開:非公開と非公開の両方を見ることを可能にする三項演算子を思いつくことができないということです。
これは私がPostモデルに持っているものです。
scope :visible_to, -> (user) { user.admin? || user.premium? ? all : where(private: false) || where(private: nil)}
コードだけのプライベートで投稿を表示上:偽。 私は、様々な組み合わせを試してみた:唯一の民間
... where(private: false || nil)}
ディスプレイ:偽の記事だけのプライベート
... where(private: nil || false)}
ディスプレイ:nilの記事
:投稿... where(private: nil && false)}
のみを表示プライベートnilを
... where(private: false && nil)}
だけを表示プライベート:偽の記事
や他のいくつかの組み合わせ -
また、私は偽とゼロの順序を切り替えたときに、それは異なる結果を表示することに気づきました。私は思った||または& &演算子は、非可換型です。おそらく、私が気付いていなかったスコープまたは3値演算子について何かがあるかもしれません...
ありがとう!
と一緒のUSINGあなたのケースについては、この記事でアウトアウトでは、[評論家](https://github.com/elabs/pundit)のような認証ライブラリを使用して検討していますか? – mysmallidea