Как работать с богатыми таблицами соединений в Rails - PullRequest
0 голосов
/ 26 июня 2018

Я застрял, борясь с богатыми таблицами соединений в Rails 5, и мне нужна помощь, чтобы начать работу Приложение, которое я пишу, поможет мне отследить, какие из поставщиков нашей компании несут какие бренды продуктов. Поскольку мне также необходимо отслеживать, является ли каждый поставщик авторизованным или неавторизованным для каждого из брендов, которые он продает, и несут ли они эти бренды на складе, я подумал, что лучшим подходом было бы использовать объединяющую таблицу и хранить там атрибуты. Другими словами:

Suppliers <---> Lines <---> Brands

Помимо ссылок на внешние ключи для Supplier и Brand, запись Line также имеет два логических атрибута: .is_authorized и .carries_stock.

Мои модели:

/ модели / supplier.rb

class Supplier < ApplicationRecord
  has_many :lines, :dependent => :destroy
  has_many :brands, :through => :lines

  accepts_nested_attributes_for :lines
end

/ модели / brand.rb

class Brand < ApplicationRecord
  has_many :lines, :dependent => :destroy
  has_many :suppliers, :through => :lines
end

/ модели / line.rb

class Line < ApplicationRecord
  belongs_to :supplier
  belongs_to :brand

  validates_presence_of :supplier
  validates_presence_of :brand
end

Я смог настроить форму редактирования контроллера и поставщика, чтобы разрешить создание записей в таблице Lines, но не знаю, как разрешить пользователям редактировать атрибуты .is_authorized и .carries_stock. Мне удалось заставить работать форму создания / редактирования поставщика, добавив следующий фрагмент:

/ вид / поставщики / _form.html.erb

  <h4>Brands</h4>
  <%= form.collection_check_boxes(:brand_ids, Brand.all, :id, :name) do |b| %>
    <%= b.label class:"label-checkbox" do%>
      <%= b.check_box + b.text%>
    <%end%>
    <br />
  <% end %>

Форма выглядит сейчас , но не позволяет мне редактировать расширенные атрибуты .is_authorized и .carries_stock. Я бы хотел, чтобы форма выглядела примерно так . Куда мне идти отсюда?

Спасибо !!!

...