2010-12-06 13 views
1

親はRailsでn回子供を作成することをどのようにして保証できますか?親の子供をRailsで一度だけ構築する方法

非永続インスタンスを見つける方法はありますか?

現在、ページの最初の読み込み時に子を作成するときに問題が発生しています。ユーザーがページをリフレッシュすると、子はすでに作成されているためにロードされませんが、永続化されていません。

どのようにこの問題を解決するためのアイデアですか?ビューで

:モデルで

if (session[:members_built] == false) 
    @membership.build_members 
    session[:members_built] = true 
end 

... 

    <% f.fields_for :members do |ff| %> 
<%= render :partial => "member", :locals => { :ff => ff } %> 

def build_members 
    (membership_type.adults - 1).times {members.build} 
    end 
+2

コードを表示してください。 –

+0

コードが追加されました。もし私が他のものを見逃してしまった場合は、私に知らせてください。 – amaseuk

+0

あなたのコントローラを見せてください。 – monocle

答えて

1
if (session[:members_built] == false) 
    @membership.build_members 
    session[:members_built] = true 
end 

私は、これはあなたの意見であるようなコードを持っていないことをお勧めします。それはMVCの原則に反している。コントローラーに移動してください。また、Rails Guides for associationsもチェックアウトしてください。

つまり、あなたのコントローラに

@membership.build_members 

ような何かを行うことができます。 #buildを使用してオブジェクトを保存しないため、#build_membersを呼び出した場合にセッション変数を使用して覚えておく必要はありません。したがって、ユーザーがページをリフレッシュすると、コントローラーは#build_membersを再度呼び出して、ビューを必要なものにする必要があります。

+1

この問題は、重複したメンバーが発生する可能性があります。たとえば、フォームがエラーとともに送信され、リロードされた場合...! – amaseuk

+0

もしそれらが固定されていなければ、それらは既存の要求サイクルを超えて存在せず、その結果重複しません。 – karmajunkie

+1

私がセッションを使用した理由は、子どもたちが何回も構築されているのを止めることです。フォームがエラーでサブミットすると、フォームの値がセッションに格納されるため、私はこの問題を経験しました。結果は重複しています。この問題を解決するためのアイデアはありますか? !membership.build_membersをスキップしますか?!params [:membership] .empty?トリックをする? – amaseuk

関連する問題