我有一个用于预算规划师的 rails 3.2 应用程序。
我的模型有一个用户,一个用户有一个预算,每个预算有很多budget_items。创建用户时,会为他们创建预算。
当用户访问他们的预算时,如果他们没有,我会插入一个空白的 budget_item。但是,我想做的是用一组带有估计成本的默认预算项目预先填充每个预算。这可以在创建预算时完成,也可以在用户访问空白预算时完成。
我希望实现尽可能干净,因为我正试图在 Rails 中以“正确的方式”做事(如果你看到任何不寻常的代码,还没有:)
我的代码可以在这里看到:https ://github.com/michaelward82/WeddingPlanner
好吧,尽管答案将被认为比快速答案更好。在给出正确答案之前,我会给出合理的时间。
编辑:
通过以下列方式更改我的 BudgetsController,我成功地创建了默认记录:
class BudgetsController < ApplicationController
def show
if current_user
@budget = current_user.budget
if @budget.budget_items.empty?
set_default_budget_items @budget
end
else
redirect_to log_in_path
end
end
def update
@budget = current_user.budget
if @budget.update_attributes(params[:budget])
redirect_to budget_path, :flash => { :success => "Budget changes saved" }
else
redirect_to budget_path, :flash => { :error => "Budget changes were not saved" }
end
end
private
def set_default_budget_items(budget)
default_budget_items = [
{ "description"=>"Insurance", "estimated_cost"=>"110", "actual_cost"=>"0", "position"=>"1"},
{ "description"=>"The Service", "estimated_cost"=>"520", "actual_cost"=>"0", "position"=>"2"},
{ "description"=>"Reception (venue, food & drinks)", "estimated_cost"=>"4000", "actual_cost"=>"0", "position"=>"3"}
]
default_budget_items.each {|b| @budget.budget_items.new(b) }
end
end
这是最好的方法吗?我很高兴接受这个,但如果有更清洁的方式来组织这个,那么我很乐意知道。默认项目比上面看到的要多得多,所以我怀疑我的控制器是存放这些数据的地方。