Rails 3, has_many: through и оператор << - PullRequest
0 голосов
/ 03 ноября 2010

Преобразование приложения в Rails 3. Обнаружился этот недостающий синтаксический сахар.

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
end

class Membership < ActiveRecord::Base
  belongs_to :group
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :memberships
  has_many :groups, :through => :memberships
end

Я больше не могу делать это в Rails 3:

$ group = Group.first
$ user = User.first
$ group.users << user
ActiveRecord::StatementInvalid: Mysql2::Error: Column 'user_id' cannot 
be null: INSERT INTO `memberships` (`admin`, `created_at`, 
`group_id`, `leader`, `updated_at`, `user_id`) VALUES 
(0, '2010-11-03 18:31:33', 5, 0, '2010-11-03 18:31:33', NULL)

Куда ушел <<? Заменено ли оно чем-то?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2010

Ключ отсутствует информация. У меня был инициализатор, который сделал следующее, чтобы принудительно установить защитное состояние на моих моделях:

ActiveRecord::Base.send(:attr_accessible, nil)

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

class Membership < ActiveRecord::Base
  belongs_to :group
  belongs_to :user
  attr_accessible :user_id, :group_id
end

По сути, внутренние компоненты Rails не должны иметь доступа к защищенным атрибутам, которые они имели до Rails 3.

0 голосов
/ 03 ноября 2010

Метод << есть.Ошибка от MySQL.Вы действительно делали это с существующими записями? </p>

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