Использование ActiveRecord для автоматического заполнения вложенных полей.User.Group.New - PullRequest
0 голосов
/ 09 марта 2012

user.rb

has_many :groups, :through => :group_members, :conditions => ['banned = ?', false]

group.rb

belongs_to :user

Контроллер групп:

group = current_user.groups.new(:uuid => group_uuid)

Rails.logger.info для group.inspect показывает group.user_id как nil? Почему это ... Разве не следует автоматически устанавливать group.user_id, когда я выполняю current_user.groups.new ()?

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

group.rb

belongs_to :owner, :class => 'User', :foreign_key => :user_id
has_many :group_members
has_many :users, :through => :group_members

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

user.rb

has_many :own_groups, :class => 'Group',  # own groups
has_many :group_members
has_many :groups, :through => :group_members

group_member.rb

belongs_to :group
belongs_to :user

group = current_user.groups.new(:uuid => group_uuid)
0 голосов
/ 09 марта 2012

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что ваши ассоциации противоречивы.В user.rb у вас есть отношение has_many :through, что означает, что связь между пользователем и группой будет сохранена в таблице group_membersgroup.rb у вас есть belongs_to ассоциация, что означает, что ассоциация будет сохранена в столбце groups, называемом user_id.

. Обычно вы используете ассоциацию has_many :through,пользователи могут принадлежать к нескольким группам, а группы могут содержать несколько пользователей (связь «многие ко многим»).belongs_to ассоциации типов следует использовать, если в группе может быть только один пользователь или пользователь может принадлежать только к одной группе.

Я предполагаю, что вы хотите, чтобы пользователи принадлежали к нескольким группам, игруппы, чтобы иметь несколько пользователей.Если это так, вы можете исправить свои ассоциации, добавив следующее к group.rb

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