「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呼び出しに応答できるようにすることができます。承認は「ページ」ビューでのみレンダリングされるため、承認のビューを含むスキャフォールド全体を生成することは意味がないようです。これにアプローチするための最良の方法は何ですか?
これは非常に長い質問だと思います。どんな洞察も大歓迎です!