Rails relations.build не работает на Many-to-Many - PullRequest
2 голосов
/ 06 апреля 2011

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

users <-> членство <->groups

требуют 'digest / sha2'

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :remember_me, :memberships_attributes

  has_many :memberships
  has_many :groups, :through => :memberships
  attr_accessible :memberships
  accepts_nested_attributes_for :memberships
end


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


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

Проблема в том, что при сборке не используются предоставленные мной атрибуты, в частности, для group_id .вставить вывод отладчика:

(rdb:1903) @user.memberships.build(:group_id=>1)
#<Membership id: nil, user_id: 5, group_id: nil, created_at: nil, updated_at: nil>

Я знаю, что отношения / ORM-сопоставления хороши, потому что я могу это сделать:

(rdb:1903) @user.memberships.first.group_id=1
1
(rdb:1903) @user.memberships.first
#<Membership id: nil, user_id: 5, **group_id: 1**, created_at: nil, updated_at: nil>

Я пробовал это на простой демонстрационной программе has_manyприложение, и оно работает нормально.


ОТВЕТ: Решено путем обновления модели членства:

attr_accessible  :user, :group, :group_id

1 Ответ

2 голосов
/ 06 апреля 2011

Если какой-либо из атрибутов защищен, вы не можете массово назначить его, используя new, build, attributes= или update_attributes.Это может блокировать ваше group_id назначение.

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