1

ユーザー、プロジェクト、およびユーザー特権の 3 つのモデルを使用しています。userprivilege モデルは、user_id、project_id、および accessLevel 値で構成されます。ユーザー モデルとプロジェクト モデルは、userprivilege と「has_many」の関係を持ち、相互に「has_many, through」の関係を持ちます。

ユーザーがプロジェクトを作成すると、対応するエントリが userprivileges テーブルに作成されます。ユーザーが別のユーザーとプロジェクトを共有する状況で、このようなエントリを作成する方法がわかりません。この状況では、ユーザーはプロジェクト ページにアクセスし、リンクをクリックしてプロジェクトへのアクセスを共有し、ターゲット ユーザーの電子メールを指定します。

この状況を UserprivilegesController の「新しい」アクションに関連付けています。「作成」アクションで、プロジェクトを共有しているユーザー オブジェクトにアクセスできますが (電子メール ID を使用)、共有されているプロジェクトのプロジェクト ID を取得する方法がわかりません。ユーザーがプロジェクト ページにアクセスして共有アクセス リンクをクリックしたときに、プロジェクト ID を保存する方法はありますか?

ありがとう。


Aldo さんのコメントのおかげで、この問題を解決できました。しかし、関連する質問があります: routes.rb ファイルを使用してこれにアプローチすることは可能ですか? プロジェクト ルートに Userprivilege アクションのルートを含めることはできますか? 例として、/projects/1/userprivileges/new または /projects/1/userprivileges/1/edit のようなものです。次に、URI からプロジェクト ID を取得できました。ただし、関連するプロジェクトからのみユーザー権限にアクセスできるように制限が必要になるため、/projects/2/userprivileges/1/edit のようなものは許可されません。その制限をどのように実装できますか?

4

1 に答える 1

0

project_idを に渡す必要がありUserprivilegesController#newます。プロジェクト ビューでこれを行うには、 link_toオプションを使用します。次に例を示します。

# app/views/project.html.erb
<%= link_to "Share access", {controller: 'userprivileges', action: 'new', project_id: @project.id}

次に、そのコントローラーで、パラメーターからこの値を取得params[:project_id]し、非表示フィールドを使用してフォームのどこかに追加します (フォームを作成する方法を使用するかhidden_fieldhidden_field_tag方法に応じて)。

アイデアはproject_id、ユーザーがフォームを送信するときに を渡して、UserprivilegesController#createアクションが (再び ) を使用してフォームにアクセスできるようにすることparams[:project_id]です。

于 2012-05-24T16:59:52.280 に答える