1

我有这个关联:

has_many :exam_portions, -> { order :position }
belongs_to :exam

在考试部分有 before_save 回调:

before_create :proper_position

private

def proper_position
  self.position = exam.exam_portions.count
end

当尝试建立关联时,会从 before_save 回调中引发以下错误: NoMethodError: undefined method 'exam_portions' for nil:NilClass

4

1 回答 1

1

那是因为您的考试部分在创建期间没有考试。

如果您以这种方式创建它,它应该可以工作:

exam.exam_portions.create()

为确保您的考试部分有考试,您应该在考试中添加 validate_presence。

编辑

以下是我们对 Georgi 的发现:

exam = Gaku::Exam.where(:name => "Final", :use_weighting => true, :weight => 6).first_or_create 
# Does not work
exam_portion = exam.exam_portions.build(:name => 'Ruby 101', :max_score => 200).save
# Works
exam_portion = exam.exam_portions.create(:name => 'Ruby 101', :max_score => 200)

也许这是 Rails 4 中的一个错误。

于 2013-06-03T13:29:38.393 回答