2012-02-01 8 views
1

私はモデルが、私は私が作成する必要がFooBar関連する複数のモデル新しいアクション

理由で関連するエントリを作成する必要がNonsenseのための私のコントローラでFooBar

のhas_oneのNonsense呼ばれていFooBarへのリンクをnewアクションに表示する必要があるアプリケーションの性質上、Nonsenseの詳細は、Fooとまで知られていない可能性があります0が記入されています。私はNonsenseのための新しいアクションで何をしようとしている

が、これは

def new 
    @nonsense = Nonsense.new 
    @nonsense.bar = Bar.new 
    @nonsense.foo = Foo.new 
... 

ある今私が遭遇しています問題は、showビューでパスヘルパーが@nonsense.fooのID文句を言うだろうということで、 @nonsense.barはゼロです。ショービューで

私はこれが起こる理由@nonsense = Nonsense.find(params[:id])nonsenseaccepts_nested_attributes_for :foo, :bar

任意のアイデアを行いますか?

答えて

0

私はBar.newが実際にデータベースにオブジェクトを作成するとは思わないので、idは実際にはまだnilです。これらのオブジェクトへのリンクが必要な場合は、まずそれらを保存する必要があります。

デフォルトの詳細で保存できますか?私はレールをあまり使っていませんが、ナンセンスをやめさせなければ、それらをきれいにするように注意する必要があると思います。もっと重要なのは、あなたのワークフローやデータモデルを整理する必要があると思われますが、もっと複雑なレール設定に慣れていない可能性があります。

最後に、これらのすべてが依存し、モデルロジックの一部である場合は、Nonsenseモデルでこれらのオブジェクトを作成し、コントローラに必要なものすべてを添付しているはずです。そうしないと、Modelロジックがコントローラに漏れてしまいます。

(私はこれは悪いレールであるかなり確信している、それが動作しても、やり方によって形成)より明示的に指定するには:

def new 
    @nonsense = Nonsense.new 

    @nonsense.bar = Bar.new 
    @nonsense.bar.any_necessary_attributes = some_value 
    @nonsense.bar.save 

    @nonsense.foo = Foo.new 
    @nonsense.foo.any_necessary_attributes = some_value 
    @nonsense.foo.save 
... 
+0

私は '@のnonsense.save'または両方' Foo'する必要がありますとバー? –

+0

安らかなスタイルコントローラの設定(index、show、new、create、...)を使用している場合は、新しいコントローラに新しいオブジェクトを保存すべきではありません。 Newはちょうどフォームを使って作業することができます。 Createはあなたの新しいNonsenseオブジェクトを保存する場所です。 – KobeJohn

+0

オブジェクトが保存される前に、関連するオブジェクトへのリンクが 'new'ビューでどのようにあったでしょうか? –

関連する問題