1

Nonsensehas_oneofFooとというモデルがありますBar

私のコントローラーでは、とNonsenseの関連エントリを作成する必要がありFooますBar

アプリケーションの性質上、詳細が入力されるまでわからない場合があるため、アクションへのリンクFooとアクションで表示する必要があるものを作成する必要がある理由。BarnewNonsenseFooBar

私が新しいアクションでやろうとしているのNonsenseはこれです

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

今私が直面している問題はshow、パスヘルパーがのIDについて文句を言い、nil@nonsense.fooであるという観点からです。@nonsense.bar

@nonsense = Nonsense.find(params[:id])ショービューでは、私はただやるだけですnonsense accepts_nested_attributes_for :foo, :bar

なぜこれが起こるのか考えていますか?

4

1 に答える 1

0

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

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

最後に、これらすべてが依存していてモデルロジックの一部である場合は、ナンセンスモデルでこれらのオブジェクトを作成し、コントローラーが必要とするすべてのものをアタッチする必要があります。そうしないと、モデルロジックがコントローラーにリークすることになります。

より明確にするために(それが機能するとしても、これはちなみに悪いレールフォームであると私はかなり確信しています):

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
...
于 2012-02-01T10:12:22.570 に答える