2012-04-21 7 views
2

私は予算プランナーのための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 

は、これが最善の方法ですか?私はこれに満足していますが、これを整理するよりクリーンな方法があれば、私は知ってうれしいです。上記の数よりも多くのデフォルト項目がありますので、私のコントローラはこのデータが生きる場所であるとは思えません。

+0

シードを試しましたか?また、seeds.rbファイルにデフォルト値 –

+0

を入力することもできます。これは、DBの作成時に必要なデータではありません。これは、予算に対するアプリの新規ユーザーごとに存在する必要があるデータです。私は種子が私が望むことをするとは思わない。 – michaelward82

答えて

3

あなたは重量のあるコントローラを作っていると思いますが、これはおそらくモデルに移動する必要があります。可能であれば、あなたのコントローラーをスキニーにしておきたい。このgoogle 'rails skinny controllers'にはたくさんの記事があります。

http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model

私はあなたがアプリケーションの残りの部分を計画正確に何に応じて、(おそらくafter_create)コールバックを使用します。

+0

あなたの答えをありがとう、私はリンクされた記事を非常に感謝します。 – michaelward82

関連する問題