さて、何よりもまず、私は非常に複雑なことをしています。間違った方向に行ってしまった可能性があります。
私が現在持っているのは、STI 継承モデル、StateDescription です。StateDescription のサブクラスは、"LocationHasItem" や "ItemNearOtherItem" など、気にすることができる特定の状態を記述します。
StateDescription のすべてのサブクラスがすべての可能な変数を使用するわけではないため、最終的にこれをマルチテーブル継承モデルにアップグレードしたいと思うかもしれないことを理解しています (ただし、高度な重複があります)。
これらの StateDescriptions は、「has_many/belongs_to」関係で別のクラスによって所有されています。
したがって、この他のクラスのフォーム内には、次のものがあります。
<%= f.fields_for :conditions do |e| %>
<br>
<%= render :partial =>"/state_descriptions/form", :locals => {:e => e, :universe => @story_section.universe, :div_id => "condition"}%>
<Br>
<% end %>
StateDescription 自体は、どのタイプをレンダリングする必要があるかを確認し、適切なパーシャルを次のようにレンダリングします (わかりやすくするために、1 つのサブクラスのみを表示します)。
<div id="<%=div_id%><%=e.object.id%>">
<li>
<%= e.select(:type, StateDescription.subclasses.collect{|x| x.to_s}) %>
<br>
<%= e.label "Inverted?" %>
<%= e.check_box :invert %>
<Br>
<% if e.object.type.to_s == "StateDescription::ItNear" %>
<%= render :partial =>"/state_description/it_nears/form", :locals => {:e => e, :universe => universe, :div_id => div_id}%>
<% end %>
<% end %>
</li>
</div>
サブクラスのパーシャルは次のようになります。
<%=e.collection_select 'item_id', universe.items, :id, :title%>
<%= e.object.title_middle_fragment%>
<%=e.collection_select 'item2_id',universe.items, :id, :title%>
したがって、フォームはすべてのサブクラスで同じように開始され、必要な場合にのみ異なります。
これは完全に機能し、私はそれに非常に満足していました...サブクラスが選択した入力フィールドから選択されたときに正しいフォームでWebページを更新することを決定するまで。
その後、フォーム ヘルパー参照 (この場合は "e") をコントローラーからパーシャルに渡すことができないことに気付きました。
この場合のベストプラクティスはありますか、それとも私は非常に複雑なことをしているので、まっすぐなjQueryなどを実行してレールを除外する必要がありますか?
フォーム全体 (各サブクラスに共通するものを含む) を各サブクラス フォームに入れると、あまり乾燥していないように見えます。それだけでなく、StateDescription サブクラスを親クラスに関連付けることができるかどうかもわかりません...
しかし、私がAJAXを行うと、ネストされたフォームについて心配することはできず、親を隠しフィールドか何かにして、AJAXを介してStateDescriptionsを独自に保存することができなかったと思いますか?
これが最善の解決策でしょうか(それが機能する場合でも?)、または私が見逃している簡単なRailsの方法はありますか?