У меня есть ПОЛЬЗОВАТЕЛЬ, который создает КОМПАНИЮ и становится СОТРУДНИКОМ в этом процессе. Таблица сотрудников имеет :user_id
и :company_id
.Использование attr_accessible в модели соединения с has_many: через отношения
class User
has_many :employees
has_many :companies, :through => :employees
class Employee
belongs_to :user
belongs_to :company
attr_accessible :active
class Company
has_many :employees
has_many :users, :through => employees
Pretty basic. Но вот что, ресурс EMPLOYEE имеет другие атрибуты, чем его внешние ключи, такие как boolean :active
. Я хотел бы использовать attr_accessible
, но это вызывает некоторые проблемы. Атрибут :user_id
установлен вправо, но :company_id
- это нуль.
@user.companies << Company.new(...)
Employee id:1 user_id:1 company_id:nil
Так что мой вопрос: если :user_id
установлен правильно, несмотря на это не attr_accessible
, почему :company_id
не установлен прямо так же? Это не должно быть attr_accessible
.
Я использую Rails 3.0.8, а также протестировал его с помощью 3.0.7.
Frankie, спасибо, что нашли время, чтобы помочь мне. Я использовал: @ user.companies.create() и ошибка была такой же. Экземпляр компании сохраняется в базе данных, но когда дело касается сотрудника, ActiveRecord жалуется, что компания не должна быть пустой. Я не пробовал, что бы вы ни делали: @ user.companies << Компания.create() В модели Employee я могу использовать валидации на company_id, например, наличие. Но мне было совершенно ясно, что это должно быть приемлемым. Когда я использую его на company_id, работают как create, так и << (с Company.new). Оба не работают, когда я этого не делаю. –
Я также попробовал @ user.companies << Company.create(), а: company_id не attr_accessible. Ошибка такая же. Компания не может быть пустым, поэтому компания-экземпляр сохраняется, но не сотрудник. Когда: company_id настроен на доступ, три способа работы: create, << Company.new и << Company.create. –
Привет. Во-первых, вам не нужно объявлять какие-либо атрибуты как attr_accessible - все они доступны по умолчанию. –