我有三个模型定义如下
class Student < ActiveRecord::Base
belongs_to :user
has_many :placements
has_many :companys , through: :placements
end
class Company < ActiveRecord::Base
has_many :placements
has_many :students , through: :placements
end
class Placement < ActiveRecord::Base
belongs_to :student
belongs_to :company
before_save :set_placed
def set_placed
s = self.student
s.is_placed = true
s.save
end
end
每次我为放置对象添加数据时,我想更新其对应的学生对象中的字段。但是,当我使用rails_admin添加数据时,我收到的错误是Placement未能创建。
当我删除before_save调用时,可以添加数据。
我正在使用better_errors gem进行调试。我从中得到以下信息
@_already_called
{[:autosave_associated_records_for_student, :student]=>false,
[:autosave_associated_records_for_company, :company]=>false}
我希望这可能是错误的原因。
我该如何解决这个错误?
答案 0 :(得分:1)
您的s.save
回调中有set_placed
。您不会在回调中保存ActiveRecord对象,尤其不会在before_save
回调中保存。
答案 1 :(得分:0)
试试这个,
def set_placed
self.student.is_placed = true
end