私は次のようなことをする私の現在のプロジェクトについての見解を持っています(hamlで):
-@horses.each do |horse|
= render :partial => 'main/votingbox', :locals => {:horse => horse}
_votingbox.html.hamlファイルには次のものがあります。
%div.votingbox
%span.name= horse.name
%div.genders
- if horse.male
%img{:src => 'images/male.png', :alt => 'Male'}
- if horse.female
%img{:src => 'images/female.png', :alt => 'Female'}
%div.voting_form
= form_for(Vote.new, {:url => horse_vote_path(horse)}) do |f|
= f.label :comment, "Your opinion"
= f.text_field :comment
...
a bunch of labels and input elements follow generated using the form helpers
これにより動作するコードが生成されますが、すべてのフォーム要素に対して同じIDを持つフォームが生成されるため、投票ボックスの部分が2回目にレンダリングされるとHTMLが無効になります。
これを修正する最初の推測は、form_forに一意の:idを指定することでしたが、これはform_forによって生成されたformタグにのみ適用され、form_forブロック内のタグには適用されません。
この問題に対する明確な解決策の1つは、form_forおよび使用するすべてのフォーム要素で独自のIDを確認し、手動で定義することです。これは私が望んでいたよりも多くの仕事です。
Railsが現在すべてのフォーム要素で一意のIDを生成する方法と同様の形式で、一意のIDを取得するためのより簡単でクリーンな方法はありますか?