0

管理者とユーザーの2つの役割を持つRailsアプリケーションがあります。ただし、管理者はActiveAdminなどのバックエンドを使用しません。管理者とユーザーの両方に同じビューを表示したいのですが、役割に応じて、表示できるものを制限します。Cancanを使用していますが、たとえば管理者とユーザーの両方が製品ページを表示できるため、ビューとコントローラーのアクション内に多くの条件が表示されます。たとえば、これが管理者であるかどうかを示し、そうでない場合は代わりに表示します。

ですから、これが「レールウェイ」だとは思いません。結局、多くのコードが繰り返され、ビュー内のコードは、ロジックをビューから遠ざけるという考えを実際にはサポートしていません。

だから私の質問は、多くの役割が同じビューでそのようなシナリオを実装するための最良の方法は何ですか?

ありがとうございました。


私は現在2つのオプションを考えていますが、どちらも好きではありません。1つは、管理者を別のビューにリダイレクトすることですが、この方法ではほとんどのビューが同じであるため、DRYではありません。オプション2は、まったく同じビューを使用することですが、ビューに多くの条件を追加するため、コードを含む非常に複雑なビューになります。私は物事をドライでありながらシンプルに保ち、ビューコードを自由に保つ方法を見つけようとしています。

4

2 に答える 2

0

管理モジュールは、デフォルトの名前空間として個別の名前空間とユーザーの下に置くことができます。パーシャルの下で共通コードを抽出し、管理モジュールとユーザーモジュールの両方で同じものを使用できます。

このようにして、ユーザーと管理者のコードを分離できます。将来、管理者とユーザーのビューを変えることにした場合は、コードを分離できます。それは大したことではありません。

  1. コントローラーを

    app / controllers / admin /articles------管理者ユーザー向け

    app / controllers /articles----通常のユーザー向け

  1. ビュー

    app / views / admin / articles

    app / views / articles

    app / views / shared

于 2012-10-23T09:30:56.687 に答える
0

さまざまな可能なアプローチがあります。ここで説明するように、「デコレータ」パターンのバリエーションが思い浮かびます。

最後に読んだのはいつかですが、基本的な考え方は、モデルまたはヘルパーにロジックを配置することだと思います。ユーザーがログインして、そのユーザーが管理者であるか通常のユーザーであるかを確認できるとすぐに、必要なhtmlまたはテキストを返すメソッドがあります。

より単純なアプローチは、すべてに対して2つのパーシャルを使用することです。ロスが別の管理名前空間で言うように、または_user_view_something.html.erbや_admin_view_something.html.erbのように、さらに単純に(ただし、後で変更する必要がある場合はさらに作業が必要です)。

やや似たような考えがDCIパターンに入ります。このブログでは、これがRailsでどのように機能するかについての概要を説明しています。この記事では権限について詳しく説明していますが、基本的な考え方は、ユーザーオブジェクトに必要な機能を追加することです。

つまり、何かをレンダリングしたり、ビューに情報を配置したりして、実際のユーザーの役割に適したものに置き換える基本的な「do_something」メソッドがあります。

于 2012-10-23T09:44:07.043 に答える