Как сделать так, чтобы экземпляры моей модели принадлежали всем пользователям моей модели? - PullRequest
0 голосов
/ 29 августа 2011

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

Марка модели

has_many :brand_users
has_many :users, :through => :brand_users

after_create :associate_with_all_users

def associate_with_all_users
  User.find(:all).each do |user|
    users << user
  end
  save
end

BrandUser модель

belongs_to :brand
belongs_to :user

Модель пользователя

has_many :brand_users
has_many :brands, :through => :brand_users

Когда я пытаюсь выполнить следующее в консоли, это показывает, что в настоящий момент последний экземпляр бренда принадлежит только одному пользователю, а не обоим (в настоящее время существует 2 пользователя).

>> User.all.count
=> 2

>>BrandUser.last.user_id
=>1 #Should not belong to just the one user but both

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

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

def associate_with_all_users
  self.users = User.all
  # save I don't believe this is necessary anymore if you assign the association
end

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

class User
  after_create :associate_with_brands

  def associate_with_brands 
    self.brands = Brand.all
  end
end

или, может быть, посмотрите на http://api.rubyonrails.org/classes/ActiveRecord/Observer.html

2 голосов
/ 29 августа 2011

Ваш код должен работать, если вы попробуете Brand.first.users Разве вы не получаете всех своих пользователей?

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

def User > ActiveRecord::Base

  def brands
    Brand.all
  end

end

def Brand > ActiveRecord::Base

  def users
    User.all
  end

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