rails 5 belongs_to 或 has_and_belongs_to_many?

rails 5 belongs_to or has_and_belongs_to_many?

我已经离开循环有一段时间了,虚心请求复习。

我想在各自的 PartnerCategories 下以手风琴样式切换列出所有合作伙伴

      <div class="panel-group">
        <% @categories.each do |category| %>
          <div class="panel panel-default">
            <div class="panel-heading">
              <h4 class="panel-title">
                <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
                  <%= category.name %>
                </a>
              </h4>
            </div>
            <div id="collapseOne" class="panel-collapse collapse in">
              <div class="panel-body">
                <% category.partners.each do |partner| %>
                  <p style="text-align:left;"><%= link_to "#{partner.firma}".html_safe, partner_path(partner) %><span style="float:right;"><%= "#{partner.full_street_address}"%></span></p>
                <% end %>
              </div>
            </div>
          </div>
        <% end %>
      </div>

型号:

class Partner
  has_many :partner_categories, :dependent => :destroy, :inverse_of => :partner
  accepts_nested_attributes_for :partner_categories, :allow_destroy => true


class PartnerCategory
  belongs_to :partner, :inverse_of => :partner_categories

控制器:

class PartnersController < ApplicationController
  def index
    @partners = Partner.all
    @categories = PartnerCategory.all
  end

当我这样做时,

上出现无方法错误
category.parters.each

我知道我遗漏了一些东西..只是找不到解决方案。

请轻点..我知道这对大多数人来说都是基本的..提前致谢!

您的 PartnerCategory 模型与您的 Partner 模型有 belongs_to 关系,这意味着您的 category 只有 partner 而不是 partners 每条记录。

为了实现您想要的效果,我建议您使用类似于以下的设置生成另一个模型,这在您需要添加验证或回调连接模型时特别有用。

class Partner
  has_many :partner_categories
  has_many :categories, through: :partner_categories
end

class PartnerCategory
  belongs_to :partner
  belongs_to :category
end

class Category
  has_many: partner_categories
  has_many :partners, through: :partner_categories
end

这样您将通过 PartnerCategory 建立 has_many 关系,并且您可以访问 category.parters.each

中某个类别的所有合作伙伴