0

ネストされたフォーム/リソースとルーティングを使用する場合のレールの通常の動作に問題があります。

単語と定義の 2 つのテーブルがあります...

単語には多くの定義がありますが、少なくとも 1 つの定義が存在するまで単語を作成しません。

モデルとコントローラー側のすべてが機能しますが、フォーム ヘルパーの処理方法がわかりません。

<%= semantic_form_for [@word, @definition] do |f| %>

これは完全に機能しますが、@word が実際に存在し、新しい UNSAVED レコードでない場合に限ります。コントローラの IE では、find_or_initialize_byWord の呼び出しを行ってから、その定義を作成しています。

<%= semantic_form_for [:word, @definition] do |f| %>

この言葉ですが、その言葉が存在しない場合に限ります。IE でこの構成を使用して編集しようとすると、奇妙な URL が表示されます (これは機能しません)。 words/12345/definition/12345

ヘルパーを使用してみましurl_forたが、上記と同様の結果が得られました...

他のアイデアはありますか?

4

2 に答える 2

1

デフォルトでは、Mongoid は埋め込みドキュメントを初期化しません。Wordほとんどの場合、モデルでコールバックを使用して自分でビルドする必要があります。

after_initialize :build_definition

def build_definition
  self.definitions.build unless self.definitions.any?
end
于 2012-02-25T02:50:50.563 に答える
0

CRUD のままにして、単語の前に定義を作成できるようにする場合は、定義のルートを複製する必要があります。1 つは単語の内側、もう 1 つは外側です。

<%= semantic_form_for [@definition] do |f| %>
于 2012-02-23T14:55:13.113 に答える