2015-10-09 3 views
1

Я уже провел недели на этом. У меня есть две модели: пользователя и Классы Модель Пользователь может иметь много классов и классы могут иметь множество пользователейRails - Связывание двух моделей с has_many отношениями

Вот мой класс Модель:

class Class < ActiveRecord::Base 
    has_many :users 
    belongs_to :users 
end 

И модель Пользователь

class User < ActiveRecord::Base 
    has_many :discipleship_classes 
end 

Я не могу понять, как настроить метод #show в пользовательском контроллере для отображения нескольких классов и наоборот -> показать несколько пользователей при просмотре классов.

Любая помощь будет оценена по достоинству.

+0

Пожалуйста, обратитесь http://toranbillups.com/blog/archive/ 2010/09/09/How-to-model-a-many-to-many-relationship-in-rails /, вы найдете хорошее объяснение. –

ответ

-1

В show зрения для @user,

<% @user.discipleship_classes.each do |d_class|%> 
<%= d_class.class.name%> 
<%= d_class.some_intrinsic_detail_of_discipleship%> 
<% end %> 
1

Что у вас есть стандартный has_many/belongs_to отношения:

enter image description here

Таким образом, ваши модели должны быть построены таким образом:

class DisclipleClass < ActiveRecord::Base 
    #columns id | user_id | etc | etc | created_at | updated_at 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :disciple_classes 
end 

Несколько важных замечания:

  1. Если у вас есть связь ActiveRecord в вашей системе, она должна быть би-полосным - IE, если у вас есть has_many :classes, он должен быть согласован с belongs_to :class (если вы не сделаете много конфигурации
  2. При объявлении ассоциаций belongs_to вам необходимо, чтобы ассоциация была единственной. Вы пишете его как множественное число
  3. При объявлении ассоциаций вы можете иметь только одну ассоциацию за имя. Ваше использование belongs_to :users и has_many :users просто не будет распознано.
  4. Все ассоциации в основном охватывают определенные ассоциации SQL. Вы бы хорошо прочитали relational databases и как их внешние ключи позволяют им взаимодействовать.
  5. Термины «класс, класс» обычно зарезервированы на большинстве языков.Не используйте их

has_and_belongs_to_many

Теперь, если вы хотите сделать many-to-many отношения, вы будете использовать has_and_belongs_to_many:

enter image description here

Это даст вам возможность использования:

#app/models/user.rb 
class User < ActiveRecord::Base 
    has_and_belongs_to_many :disciple_classes 
end 

#app/models/disciple_class.rb 
class DiscipleClass < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end 

Это позволит создать join table следующим образом:

#disciples_classes_users 
disciple_class_id | user_id 

Это позволит вам позвонить:

@user.disciple_classes 
@disciple_class.users 
Смежные вопросы