关联构建时出现rails4错误或使用before_filter时创建

时间:2013-06-03 12:52:52

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

我有这个联想:

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

1 个答案:

答案 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中的一个错误。