Имеет и принадлежит многим подходящим

Я новичок на этом сайте, с нетерпением жду дальнейшего участия :)

Я создаю систему заказов клиентов, используя rails3, devise, cancan и т. д.

Вкратце, у нас три модели:

  1. Пользователи
  2. Компании
  3. Заказы

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

Однако на самом деле у нас есть два типа пользователей:

  1. Административный персонал здесь, который может создавать компании, обновлять информацию и т. д.
  2. Наши клиенты, которые могут войти в систему и видеть только свои компании и связанные с ними заказы.

Думал создать два контроллера - админ и юзеры но это кажется ненужным и не очень рельсовым. Плюс канкан может делать все, что я думаю.

Как вы думаете, что нам здесь делать? Мы думали об использовании отношения has_and_belongs_to_many, но большинство людей в Интернете, кажется, советуют избегать его.

Спасибо,

Дженни

--- редактировать ---

Спасибо всем, кто помог!

После некоторого чтения я решил использовать has many через ассоциацию.

Я создал новую модель под названием «Соглашение» и настроил свои модели следующим образом:

class User < ActiveRecord::Base
  has_many :agreements
  has_many :companies, :through => :agreements
end


class Company < ActiveRecord::Base
  has_many :agreements
  has_many :users, :through => :agreements
end

Я немного застрял и не могу найти хороший пример в Интернете.

Должен ли я создавать пользователя и компанию отдельно, а затем создавать соглашение, чтобы сопоставить их?

Еще раз всем спасибо за помощь.


person Jenny Blunt    schedule 08.06.2011    source источник
comment
Вы нашли рабочее решение сейчас? если да, вы должны принять ответ.   -  person pdu    schedule 18.01.2012


Ответы (3)


Судя по описанию у вас:

  1. Пользователи
  2. Клиенты
  3. Компании
  4. Заказы

Администраторы — это пользователи, у которых есть роль, позволяющая им получать доступ к созданию и обновлению компаний. Клиент принадлежит компании, а также может быть «пользователем» в зависимости от информации, которую вы храните в модели пользователя.

Что касается HABTM, его все еще можно использовать, если вы не добавляете дополнительные данные в таблицу соединений. Как правило, у вас будет некоторая информация в таблице соединений, поскольку она обеспечивает дополнительный контекст для соединения.

Библиотека бесплатных моделей данных является хорошим ресурсом для образцов моделей данных, а также для того, чтобы дать некоторые идеи относительно сущностей и взаимосвязей. а>

person Grant Sayer    schedule 08.06.2011
comment
В этом суть. Спасибо, почитаю в библиотеке.. J - person Jenny Blunt; 08.06.2011
comment
Я согласен, что вы можете воспользоваться другой моделью. Возможно, у вас может быть модель администратора с записью для каждого пользователя, которому требуются права администратора. Как и другие выше, я предпочитаю использовать has_many :through. - person Wizard of Ogz; 08.06.2011
comment
Спасибо, только что отредактировал свой первый вопрос. Подумайте, что has_many лучше всего. Настроили, но теперь немного застряли!! - person Jenny Blunt; 08.06.2011

Вы можете использовать has_many :through . Похоже, что в ближайшем будущем приложению наверняка потребуются постоянные изменения. Так что в этом случае это будет полезно Ответить на любые вопросы

спасибо

person Bijendra    schedule 08.06.2011
comment
Привет спасибо. Если у пользователей много компаний, а у компаний много пользователей, как мне использовать «сквозь» - они кажутся напрямую связанными? Джей Би - person Jenny Blunt; 08.06.2011
comment
@jenny вы можете использовать напрямую, это также помогает, если вы хотите увеличить какие-либо атрибуты. /association_basics.html .Посмотрите, и вам станет ясно - person Bijendra; 08.06.2011
comment
извините, новичок во всем этом?! Это правильно??! Я собираюсь попробовать использовать ассоциацию has_many :through. Тем не менее, все еще немного застрял, сделал некоторые комментарии в оригинале. Дж - person Jenny Blunt; 08.06.2011
comment
соглашение о классе ‹ ActiveRecord::Base принадлежит_к: пользователь принадлежит_к: конец компании Я думаю, это то, о чем вы просите - person Bijendra; 09.06.2011

Во-первых, вам нужно знать, чего вы действительно хотите достичь, понимать отношения и то, как они должны выглядеть. Нарисуйте какую-нибудь модель отношений сущностей на бумаге, это поможет.

Лично я предпочитаю user has_many :through, потому что, если вам нужно хранить дополнительные данные для этого отношения (что может иметь место при расширении вашего приложения), вы уже настроены, и вам не нужно переносить свои таблицы и модели из habtm в has_many: через.

Для разрешений пользователя придерживайтесь cancan.

person pdu    schedule 08.06.2011
comment
Привет, habtm, кажется, работает, но мне не нужна таблица соединений с информацией о компании в... Выглядит правильно, но has_many через кажется более аккуратным. Просто не совсем уверен, как это будет работать в моем сценарии. J - person Jenny Blunt; 08.06.2011