1

「User」というモデルと「Page」というモデルを持つRailsアプリを書いています。ユーザーは複数のページを持つことができ、ユーザーは他のユーザーに自分のページを表示することを許可することもできます。これをRailsで説明するために、私が作成した「Authorization」と呼ばれる3番目のモデルとのhas_many、:through関係を使用しています。モデルは次のようになります。

class User
  has_many :pages, dependent: :destroy
  has_many :authorizations, dependent: :destroy
  has_many :viewable_pages, :through => :authorizations, :source => 'page'
end

class Page
  belongs_to :user

  has_many :authorizations, dependent: :destroy
  has_many :authorized_viewers, :through => :authorizations, :source => 'user'
end

class Authorization
  belongs_to :page
  belongs_to :user
end

バックエンド機能に関する限り、これは私にとって完璧に機能しています。これらの関係をレンダリングし、クライアントがそれらを変更できるようにすることに関しては、私は少し困惑しています。

Pageのコントローラーがあり、「show」が呼び出されたら、ページをレンダリングします。ページをレンダリングするとき、authorized_viewersのページのリストもレンダリングし、ユーザーがAJAXコマンドを使用してそのリストを変更できるようにします。基本的に、「ページ」レイアウトで次のようなことをしたいと思います。

<% @authorized_viewers.each do |v| %>
  <li><%= v.email %><%= link_to 'delete', authorization, method: :delete, remote: :true %></li>
<% end %>

承認自体ではなく、authorized_viewerを参照する方法がよくわかりません。ユーザーではなく、関係を削除したいだけです。また、「destroy」のようなメソッドを作成するために「Authorization」のコントローラーを作成する必要があるかどうかもわかりません。このメソッドを変更して、AJAX呼び出しに応答できるようにすることができます。承認は「ページ」ビューでのみレンダリングされるため、承認のビューを含むスキャフォールド全体を生成することは意味がないようです。これにアプローチするための最良の方法は何ですか?

これは非常に長い質問だと思います。どんな洞察も大歓迎です!

4

1 に答える 1

2

ビューで承認を表示する簡単な方法は次のとおりです (ページ/承認関係にネストされたルートを使用していると仮定し、それ以外の場合はパス引数を変更します)。

<% @authorizations.each do |authorization| %>
  <li><%= authorization.user.email %><%= link_to 'delete', page_authorization_path(@page, authorization), method: :delete, remote: :true % </li>
<% end %>

そのオブジェクトに対して直接アクション (作成/破棄など) を実行する場合は、承認用のコントローラーを作成することをお勧めします。これが常に AJAX で行われる場合は、ビューを作成する必要はありません。これにより、すべての機能が整理され、承認に特に関連する対話が承認コントローラーに存在することが保証されます。スキャフォールドを作成するのではなく、次の 2 つのアクションでコントローラーを作成するだけですcreatedestroy

于 2012-06-11T23:03:47.997 に答える