【问题标题】:Rendering and linking to "has_many, :through" associations渲染和链接到“has_many, :through”关联
【发布时间】:2012-06-11 21:55:36
【问题描述】:

我正在编写一个 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 调用的能力。授权只会在“页面”视图上呈现,因此生成带有授权视图的整个脚手架似乎没有意义。解决这个问题的最佳方法是什么?

我意识到这是一个很长的问题。任何见解将不胜感激!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 web-applications partial-views


    【解决方案1】:

    在视图中显示授权的一种更简单的方法是(假设您使用嵌套路由来表示页面/授权关系,否则修改路径参数):

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

    如果您要直接针对该对象执行操作(例如创建/销毁),最好为授权创建一个控制器。如果始终通过 AJAX 完成,则不必创建任何视图。这使您的所有功能保持井井有条,并确保任何与授权相关的交互都驻留在授权控制器中。避免创建脚手架,而只需使用两个操作创建控制器:create 和 destroy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2015-12-17
      相关资源
      最近更新 更多