rails 5属于或具有has_and_belongs_to_many?

时间:2018-07-25 13:18:06

标签: ruby-on-rails-5 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

我知道我缺少什么。.只是找不到解决方法。

请保持温柔..我知道这对于大多数人来说是基本的。.并且预先感谢!

1 个答案:

答案 0 :(得分:1)

您的PartnerCategory模型与您的Partner模型之间具有属主关系,这意味着您的category每条记录只有partner而不是partners。 / p>

要实现所需的功能,建议您使用与下面类似的设置来生成另一个模型,当您需要添加验证或回调加入模型时,这特别有用。

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中某个类别的所有合作伙伴