私は予算プランナーのための3.2のアプリを持っています。Rails:has_many関係のデフォルトレコードを作成する
私のモデルはユーザーを特色にしており、ユーザーは1つの予算しか持っておらず、各予算には多くのbudget_itemがあります。ユーザーが作成されると、そのユーザーの予算が作成されます。
ユーザーが予算にアクセスすると、予算がない場合は空のbudget_itemを挿入します。しかし、私がやりたいことは、各予算に、推定コストを伴うデフォルトの予算項目をあらかじめ組み込んでおくことです。これは、予算の作成時またはユーザーが空白の予算にアクセスする場合に実行できます。
私はRailsの中で物事に「正しい道」をやろうとしているとして、あなたが異常なコードを見れば、私はまだなく、かなりそこに(できるだけきれいな実装をしたいと思います:)
私のコードをすることができここに表示されます:https://github.com/michaelward82/WeddingPlanner
よく答えはクイック回答よりも優れていると考えられます。私は正解を与える前に妥当な時間を与えるでしょう。
編集:
私は次のように私のBudgetsControllerを変更して、デフォルトのレコードの作成を達成するためにsucceddedています
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
は、これが最善の方法ですか?私はこれに満足していますが、これを整理するよりクリーンな方法があれば、私は知ってうれしいです。上記の数よりも多くのデフォルト項目がありますので、私のコントローラはこのデータが生きる場所であるとは思えません。
シードを試しましたか?また、seeds.rbファイルにデフォルト値 –
を入力することもできます。これは、DBの作成時に必要なデータではありません。これは、予算に対するアプリの新規ユーザーごとに存在する必要があるデータです。私は種子が私が望むことをするとは思わない。 – michaelward82