簡體   English   中英

渲染並鏈接到“ has_many,:through”關聯

[英]Rendering and linking to “has_many, :through” associations

我正在編寫一個Rails應用程序,該應用程序具有一個名為“ User”的模型和一個名為“ Page”的模型。 用戶可以具有多個頁面,並且用戶還可以授權其他用戶查看其頁面。 為了在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

就后端功能而言,這對我來說一直很好。 在呈現這些關系並允許客戶端修改它們時,我有些沮喪。

我有一個用於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。 我只想刪除關系,而不是用戶。 我也不確定是否應該為“授權”創建一個控制器,以創建諸如“銷毀”之類的方法,可以對其進行修改並使它們能夠響應AJAX調用。 授權只會在“頁面”視圖上呈現,因此生成帶有授權視圖的完整支架似乎沒有意義。 解決此問題的最佳方法是什么?

我意識到這是一個很長的問題。 任何見解將不勝感激!

在視圖中顯示授權的一種更簡單的方法是(假設您使用的是頁面/授權關系的嵌套路由,否則請修改path參數):

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

如果您要直接針對該對象執行操作(例如創建/銷毀),則最好為授權創建一個控制器。 如果始終要通過AJAX完成此操作,則不必創建任何視圖。 這樣可以使您的所有功能井井有條,並確保所有與授權相關的交互都駐留在授權控制器中。 避免創建支架,而只需使用以下兩個操作create控制器: createdestroy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM