cyb*_*kni 5 haml ruby-on-rails actionview
我有一个关于我当前项目的视图,它执行以下操作(以haml为单位):
-@horses.each do |horse|
= render :partial => 'main/votingbox', :locals => {:horse => horse}
Run Code Online (Sandbox Code Playgroud)
在_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
Run Code Online (Sandbox Code Playgroud)
这将生成工作代码,但它确实为所有表单元素生成具有相同ID的表单,这使得一旦第二次呈现投票箱部分时HTML就无效.
我对修复此问题的第一个猜测是指定一个唯一的:form to form,但它仅适用于form_for生成的表单标记,而不适用于form_for块中的任何标记.
这个问题的一个明确的解决方案是在form_for和我使用的所有表单元素上手动定义我自己的唯一ID.这比我希望的工作更多.
是否有一种更简单或更简洁的方法来获得与Rails当前在我的所有表单元素上生成它们的方式类似的独特ID?
我已删除原始答案,因为它与问题的更新版本完全无关。
\n\n更新:现在我们知道您有一个未保存的 ActiveRecord 对象传递给调用form_for,答案变得简单:您可以覆盖form_for生成的任何参数。其中包括元素 id。并fields_for设置特定记录的上下文。
= form_for(Vote.new, :url => horse_vote_path(horse), :id => dom_id(horse, 'vote')) do |f|\n = f.fields_for horse, :index => horse do |fh|\n = fh.text_field :whatever\n \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2039 次 |
| 最近记录: |