Tha*_*anh 0 ruby-on-rails ruby-on-rails-3
我有2个型号:
这是两个模型中的列:
我想通过加上TopicQuestion中每个主题的number_question来计算一般考试的总问题数.所以我写了一个像这样的方法:
class GeneralExam < ActiveRecord::Base
has_many :topic_questions, dependent: :destroy
validates :number_question, numericality: { only_integer: true, greater_than: 0 }, on: :save
after_save :calc_number_question
private
def calc_number_question
number_question = 0
self.topic_questions.each do |tq|
number_question += tq.number_question
end
self.number_question = number_question
self.save
end
end
Run Code Online (Sandbox Code Playgroud)
但是当我提交时,我收到错误:
SystemStackError in GeneralExamsController#create
stack level too deep
Run Code Online (Sandbox Code Playgroud)
这是我的参数:
{"utf8"=>"?",
"authenticity_token"=>"VyojDMOltc5wOJMDf4gtDM6lEk6soTZl/EaY9qrCRyY=",
"general_exam"=>{"course_id"=>"1",
"name"=>"dada",
"description"=>"dada",
"semester_id"=>"1",
"duration"=>"1",
"topic_questions_attributes"=>{"0"=>{"_destroy"=>"false",
"topic_id"=>"15",
"number_question"=>"15"},
"1"=>{"_destroy"=>"false",
"topic_id"=>"13",
"number_question"=>"6"},
"2"=>{"_destroy"=>"false",
"topic_id"=>"Choose a topic",
"number_question"=>""},
"3"=>{"_destroy"=>"false",
"topic_id"=>"Choose a topic",
"number_question"=>""},
"4"=>{"_destroy"=>"false",
"topic_id"=>"Choose a topic",
"number_question"=>""}}},
"commit"=>"Create General exam"}
Run Code Online (Sandbox Code Playgroud)
我错了什么?
ck3*_*k3g 11
你最后打电话self.save了.它开始了另一个after_save回调.
如果你的rails版本是3.2.1或更高版本,你可以使用
update_column :number_question, number_question
Run Code Online (Sandbox Code Playgroud)
跳过回调.
无关:
你可以重写它
number_question = 0
self.topic_questions.each do |tq|
number_question += tq.number_question
end
Run Code Online (Sandbox Code Playgroud)
如
number_question = self.topic_questions.inject(0) { |sum, tq| sum + tq.number_question }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |