has_many: через проблему ассоциации - PullRequest
1 голос
/ 17 августа 2010

Я немного новичок в ruby, и у меня возникла проблема с has_many: через ассоциации.Моя система в настоящее время настроена с Authlogic и Declarative_auth.В тот момент, когда я регистрирую пользователя, он создает все правильно, за исключением того, что не вставляет role_id в таблицу users, даже если он показывает, что он передан на submit.Он также не сохраняет идентификаторы в таблице назначений.Прежде всего, я предполагаю, что вопрос заключается в том, нужен ли role_id в таблице пользователей?Во-вторых, нужно ли объявлять поля user_id и role_id в таблице назначений как foreign_key или rails автоматически это обрабатывает?Я ценю любую помощь в этом.

class User < ActiveRecord::Base
  acts_as_authentic
  has_many :assignments
  has_many :roles, :through => :assignments

  def role_symbols
    roles.map do |role|
      role.name.underscore.to_sym
    end
  end
end

class Role < ActiveRecord::Base
  has_many :assignments
  has_many :users, :through => :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
end

1 Ответ

0 голосов
/ 17 августа 2010

Ролевой ли вообще нужен в таблице пользователей?

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

сделать поля user_id и role_id в таблица назначений должна быть объявлен как Foreign_key или делает рельсы автоматически справляются с этим?

Ограничения уровня DB не требуются Rails. Единственное, что требуется Rails для работы с ассоциациями - это сами объявления ассоциаций и наличие соответствующих столбцов id в соответствующих таблицах.

Этот Railscast является хорошим введением в has_many: through.

...