Ruby on rails 在呈现视图之前,如何在RubyonRails模型中运行计算?
我有一个应用程序,用户可以在其中完成许多测试。这些测试的结果随后存储在数据库中Ruby on rails 在呈现视图之前,如何在RubyonRails模型中运行计算?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个应用程序,用户可以在其中完成许多测试。这些测试的结果随后存储在数据库中 class TestOne < ActiveRecord::Base belongs_to :user before_save :calculate_total private def calculate_total self.total = self.question_1 + self.question_2 end end classtestone
class TestOne < ActiveRecord::Base
belongs_to :user
before_save :calculate_total
private
def calculate_total
self.total = self.question_1 + self.question_2
end
end
classtestone
然后我有一个摘要页面,它执行一些计算(在摘要页面模型中),然后这些值显示在摘要页面上
class Summary < ActiveRecord::Base
def self.amount
amount = 0
@users.each do |u|
if u.test_ones.present?
amount += 1
else
end
if u.test_twos.present?
else
end
return amount
end
end
类摘要
我遇到的问题是,在保存新数据时,计算(金额)不会更新。我假设有一些代码可以放在模型中,使其在呈现摘要视图之前重新计算(类似于另一个模型中保存之前的)
提前感谢x您可以在控制器中使用before\u action
或before\u filter
(Rails 5.1中不推荐)(控制器控件显示视图层,模型处理记录的逻辑。根据您的操作的复杂程度,这可能是一个不好的解决方案。如果需要很长时间,或者流变得复杂,则最好将其排除在控制器之外。有关详细信息,请参阅帖子。还请注意本示例中的渲染流:
def update
if @tree.update(tree_params) # Render / Re-route based on truthy.
redirect_to(@tree)
else
render('edit')
end
end
但是,还有其他库专门处理类似的事情。例如,当组件的“属性”或“状态”发生更改时,ReactJs将自动重新呈现组件。仅为此实现React可能会有太多开销,但如果您预期会有大量动态页面数据,则最好使用一些fa自动化视图层组件的javascript的cet。感谢您的帮助。我似乎仅仅通过在我的摘要模型和测试模型之间建立关联就解决了这个问题。这是一种合适的修复方法吗?如果它有效,并且您乐于维护代码,那么请确定。