我正在编写一个 Rails 应用程序,它有一个名为“用户”的模型和一个名为“页面”的模型。用户可以有多个页面,用户也可以授权其他用户查看他们的页面。为了在 Rails 中描述这一点,我使用了 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
就后端功能而言,这对我来说非常有效。在呈现这些关系并允许客户修改它们时,我有点难过。
我有一个页面控制器,当调用“显示”时,我渲染页面。当我呈现页面时,我还想呈现页面的authorized_viewers 列表并允许用户使用AJAX 命令修改该列表。本质上,我想在“页面”布局中做这样的事情:
<% @authorized_viewers.each do |v| %>
<li><%= v.email %><%= link_to 'delete', authorization, method: :delete, remote: :true %></li>
<% end %>
我不太确定如何引用授权本身,而不是authorized_viewer。我只想删除关系,而不是用户。我也不确定是否应该为“授权”创建一个控制器,以便创建像“销毁”这样的方法,我可以对其进行修改并赋予它们响应 AJAX 调用的能力。授权只会在“页面”视图上呈现,因此生成带有授权视图的整个脚手架似乎没有意义。解决这个问题的最佳方法是什么?
我意识到这是一个很长的问题。任何见解将不胜感激!