Модель ассоциации ActiveRecord - PullRequest
0 голосов
/ 29 июля 2010

Я новичок в рельсах и прочитал это руководство , чтобы получить всю информацию.

У меня простой сценарий, и я хочу убедиться, что мои ассоциации будут работать нормально.

Сценарий: User входит в систему -> устанавливает множество groups -> в каждой группе много employees

User модель:

class User < ActiveRecord::Base
    has_many :groups
end

Group модель:

class Group < ActiveRecord::Base
    belongs_to :user
    has_many :employees
end

Employee модель:

class Employee < ActiveRecord::Base
    has_many :groups
    belongs_to :group
end

Вопросы

  • Будет ли это работать для сценарияЯ упомянул?
  • Я не понимаю, как получить все Employees под User.Какой будет код для этого?
  • Если мне понадобится типичный CRUD для всех этих моделей, то это будет в моем действии?Индекс / создание / обновление / уничтожить?Может кто-нибудь указать мне хорошее руководство по действиям?

Ответы [ 2 ]

0 голосов
/ 29 июля 2010

Мне также нравится has_many через -

class User < ActiveRecord::Base
    has_many :groups
    has_many :employees, :through=>:groups
end

Тогда вы можете перейти:

user = User.find(23)
user.employees.do_something

В противном случае вы можете перебрать свои группы и их сотрудников (довольно уродливо, нобудет работать)

User.first.groups.each{|group| group.employees.each{|employee| puts employee.name}}
0 голосов
/ 29 июля 2010

По большей части, у вас есть все вместе, но я думаю, что вам нужно взглянуть на has_and_belongs_to_many (который вы часто будете видеть сокращенно как habtm.) Индекс, создание, обновление и уничтожение - ваш список CRUD для Ruby on Rails , Что касается хорошего руководства, мне нравится Agile Web Development With Rails от Dave Thomas. (Когда я поднимаю новую тему, мне нравятся книги - электронные или иные.) Она доступна онлайн через The Practical Programmers. Вопрос о том, «что такое хороший гид», довольно субъективен, поэтому будьте осторожны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...