我有这个联想:
has_many :exam_portions, -> { order :position }
belongs_to :exam
在exam_portion中有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
答案 0 :(得分:1)
那是因为你的exam_portion在创建过程中没有考试。
如果你以这种方式创建它应该有效:
exam.exam_portions.create()
为了确保您的exam_portion参加考试,您应该在考试中添加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中的一个错误。