2013-07-02 2 views
0

У меня есть конкретный проект. Я пытаюсь определить наиболее эффективный и логичный способ настройки моих моделей в моем приложении. Здесь должны присутствовать следующие игроки: Продавцы, Товарные запасы и продукты. Вот расстройство того, что каждый элемент должен быть в состоянии вернуться в некотором роде:Структура моделирования данных - рельсы

инвентаризаций: магазин ID Продукты и связанные с ними детали (цена, наименование, марка, Детали, код продукта)

Вендоры: Магазин ID, местоположение, имя

Продукты: Цена, Название, марка, Деталь, Код товара

Очевидно, что существует много дублирования в этой схеме между продуктами и товарно-материальными запасами. Моя проблема заключается в том, что, хотя у продавцов могут быть похожие элементы в своих запасах, цена всегда будет отличаться. Поэтому я не могу просто связать модели по коду продукта. Поскольку у большинства вендоров будут одни и те же продукты, если я буду моделировать запасы магазинов со всей информацией о продукте, не будет ли это много дублирования? Также возможно, что мне не нужно иметь отдельную модель для поставщиков, и я могу просто попытаться сохранить все запасы, но я потерян. Помоги пожалуйста?! Заранее спасибо.

EDIT:

Вот моя модель структуры, хотя я не уверен, что это идеальный вариант.

class Vendor < ActiveRecord::Base 

    attr_accessible :name, :address 

    has_one  :inventory 
    has_many :products, through: :inventories 
end 

class Inventory < ActiveRecord::Base 

    has_many :products 
    belongs_to :vendor 
end 

class Product < ActiveRecord::Base 

    attr_accessible :upc, :brand, :product, :details, :price 

    has_many :inventories 
    has_many :vendors, through: :inventories 

end 
+0

вы должны вставить образец кода модели, было бы легче увидеть проблему.Тем не менее, из того, что я понимаю, поставщики и продукты имеют отношение много к большому числу да? что означает, что будет таблица соединений, вы можете просто поместить цену в таблицу соединений, таким образом, не иметь повторяющихся продуктов и уникальных цен для каждого поставщика. в зависимости от ситуации, вы могли бы, вероятно, покончить с инвентарем, ну или просто вызвать инвентаризацию таблицы соединений. надеюсь, что это помогает – Saifis

+0

У меня пока нет образца кода. Я ждал, чтобы что-то генерировать, пока я не понял проблему более концептуально. Спасибо за подсказку о таблице соединений. Я сделал несколько поисков и нашел хорошую документацию об ассоциациях ActiveRecord. Посмотрим, куда это приведет. – settheline

ответ

1

Я не уверен, если я понимаю, ваши конкретные потребности, особенно если множество моделей только для примера, но, судя по именам, здесь будет моя реализация.

вендора является основным органом, он будет владеть много продуктов через присоединиться к инвентаризации таблицы,

class Vendor < ActiveRecord::Base 

    attr_accessible :name, :address 

    has_many  :inventories 
    has_many :products, through: :inventories 
end 

Однако есть аспекты продукта, которые должны отличаться от поставщиков, в данном случае, цена и количество (Я только что сделал это), который можно сохранить в таблице соединений, поскольку он будет независимым и предназначен для каждого продукта и отношений с поставщиками, идеально подходит для хранения информации, такой как цена и количество.

class Inventory < ActiveRecord::Base 

    attr_accessible :product_id, :vendor_id, :price, :quantity 

    belongs_to :product 
    belongs_to :vendor 
end 

Продукт должен иметь только атрибуты, которые были бы универсальными независимо, как поставщик обрабатывает его, также, если продукт, где нужно изменить, оно должно быть в порядке со всеми поставщиками.

class Product < ActiveRecord::Base 

    attr_accessible :upc, :brand, :product, :details 

    has_many :inventories 
    has_many :vendors, through: :inventories 

end 

У вас могут возникнуть трудности с редактированием этого в представлении, установив цены и количество в инвентаре. Опять же, мой способ сделать это было бы использовать вложенные поля и взаимодействовать непосредственно с соединительной таблице, а не продукты, вот некоторые быстро частичный код с помощью simple_form камень,

на Вас форме,

<%= f.simple_fields_for :inventories do |inventory_fields| %> 
     <%= render partial: "inventory_fields", locals: {f: inventory_fields }%> 
    <% end %> 
    <%= link_to_add_fields "Add", f, :f %> 

и в inventory_fields.html.erb

<%= link_to "Remove", '#', class: "remove_fields btn btn-danger" %> 
    <%= f.input :product_id, collection: Product.all.somethingsomething, include_blank: false %> 
    <%= f.input :price %> 
    <%= f.input :quantity %> 

Теперь вы можете выбрать продукты из выпадающего списка, и установить цену и количество, и все, что вам нужно динамически.

+0

Хорошие мысли Сайфиса. Модели реальны. Цена будет варьироваться в зависимости от поставщика, но не будет записанных количеств. Мне все еще сложно понять, как цена и идентификатор продукта могут быть включены в модель инвентаря. Означает ли это, что экземпляр класса инвентаря вернет цену и идентификатор продукта: в хеше или массиве? – settheline

+1

Будет создан экземпляр инвентаризации для каждого продукта, с которым связан поставщик, так как таблицы соединений работают в отношениях «многие-многие», таблица соединений поглощает все дублирование от Product и Vendor. – Saifis

+0

коррекция, a имеет много и относится ко многим отношениям – Saifis

Смежные вопросы