无法在rails应用程序中保存关联对象的属性

时间:2013-10-28 12:39:45

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我有三个模型定义如下

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}

我希望这可能是错误的原因。

我该如何解决这个错误?

2 个答案:

答案 0 :(得分:1)

您的s.save回调中有set_placed。您不会在回调中保存ActiveRecord对象,尤其不会在before_save回调中保存。

答案 1 :(得分:0)

试试这个,

def set_placed
  self.student.is_placed = true
end