【发布时间】:2015-07-17 13:34:04
【问题描述】:
创建数量列表后,列表属性total_calories 应更新为与列表关联的所有calories 的总和。 Lists 和 Foods 关联 has_many :through Quantities,每个 Food 都有一个 calories 属性。
当我在 c9.io 托管的 Rails 开发用户界面中创建一个 List 时,它的行为符合预期。当我在控制台中创建一个列表时,它没有; total_calories 没有更新。这怎么可能?
我将不胜感激有关调查内容的任何提示,因为我从未遇到过控制台和开发用户界面之间不一致的问题。
服务对象count_calories.rb:
class CountCalories
def initialize(list)
@list=list
end
def count
@calories = 0
@list.quantities.each do |q|
@calories += Food.find(q.food_id).calories
end
@list.update!(total_calories: @calories)
@list.save!
end
end
List控制器中的create方法:
def create
@list = WriteList.new(list_params).write
if @list.save
flash[:success] = "A list has been created!"
CountCalories.new(@list).count
redirect_to @list
else
render 'new'
end
end
服务对象write_list.rb,如果有帮助的话:
class WriteList
def initialize(params)
@params=params
end
def write
ActiveRecord::Base.transaction do
list = List.new(days: @params[:days], name: @params[:name])
list.save!
3.times do
food1 = Food.all.sample.id
Quantity.create!(food_id: food1, list_id: list[:id], amount: 1+rand(6))
end
list.save!
return list
end
rescue
return List.new(days: @params[:days], name: @params[:name])
end
end
我唯一能想到的可能是它与迁移创建total_calories有关:
class AddTotalCaloriesToLists < ActiveRecord::Migration
def change
add_column :lists, :total_calories, :integer, :default => 0
end
end
但大多数情况下,我很困惑,如果有任何提示,我将不胜感激。
【问题讨论】:
标签: ruby-on-rails service console development-environment cloud9-ide