RoR: уровень стека слишком глубокий после метода create? - PullRequest
2 голосов
/ 10 марта 2011

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

class record

  has_many :authorizations
  has_many :roles, :through => :authorizations, :dependent => :destroy, :primary_key => :record_secondary_id

  after_create :new_record

  def create_roles
    self.roles.create :name => "#{self.record_title} edit", :record_id => self.id, :edit => true, :review => false
    self.roles.create :name => "#{self.record_title} review", :record_id => self.id, :edit => false, :review => true
  end

  def set_secondary_id
      self.update_attribute :record_secondary_id, self.id
  end

  def new_record
    if self.record_secondary_id.blank?
      set_secondary_id
      create_roles
    end
  end
  end

end

Ответы [ 2 ]

1 голос
/ 10 марта 2011

У вас бесконечная рекурсия между create record и create_roles.

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

Отредактировано:

В вашем контроллере,

@record = Record.new(params[:record])
@role1 = Role.new('some_params')
@role2 = Role.new('some_params')
@record.roles = [@role1, @role2]
@record.save
0 голосов
/ 17 марта 2011

Я думаю, что ваша проблема может быть вызвана следующим вызовом:

 has_many :authorizations
 has_many :roles, :through => :authorizations, :dependent => :destroy, :primary_key => :record_secondary_id

изменить это на:

  has_many :authorizations, :dependent => :destroy, :primary_key => :record_secondary_id
  has_many :roles, :through => :authorizations

это должно решить твою проблему.

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