【问题标题】:Using a Form_for with an each loop使用带有每个循环的 Form_for
【发布时间】:2013-07-28 00:27:18
【问题描述】:

我正在尝试在 Rails 中创建一个表单,允许用户使用复选框从较大的列表中选择某些照片。不幸的是,我没有找到任何类似的例子,而且大多数帖子都没有帮助。关于如何解决这个问题的任何想法?

 <div>
  <%= form_for :photos, url: trip_path, method: "PUT"  do |f| %>
  <% @photos.each_with_index do |image, index|%>    
    <img src="<%= image.url %>" ><br>
      <span> <%=image.caption%> | <%=image.lat  %> | <%= image.long  %>
        <%= f.hidden_field "url", :value => image.url %>
        <%=check_box_tag('photo')  %>
      </span>
    <% end %>
    <%= f.submit 'Submit'  %>
  <% end %>
</div>

【问题讨论】:

  • 您的 sn-p 包含一些令人震惊的格式/缩进不一致,其中一些可能会对您的代码是否正确呈现产生重大影响。例如,您在 &lt;img&gt; 标记内缩进了 &lt;span&gt;,尽管 &lt;img&gt; 标记没有结束标记。为了清楚起见,请重新格式化您的代码并重新发布。

标签: ruby-on-rails erb


【解决方案1】:

API docs 声明 form_for

围绕特定模型对象创建表单和范围

所以,你不能将它与集合一起使用。

一种可能的方法是使用form_tag 而不是form_forcheck_box_tag(您已经拥有)。

【讨论】:

    【解决方案2】:

    您所描述的行为绝对不可能使用form_form但是,如果您愿意放弃 form_for(根据您的标准,您没有理由不这样做),您可以通过嵌套 foreach 循环来模仿所描绘的行为 - 每个包含 form_for 块的循环 - 在 form_tag:

    <div>
        <%= form_tag trip_path, method: "PUT"  do |f| %>
            <% @photos.each do |photo|%>    
                <img src="<%= photo.url %>" ><br>
                <span> <%= photo.caption%> | <%= photo.lat  %> | <%= photo.long  %>
                    <%= fields_for "photos[#{photo.id}]", photo do |p| %>
                        <%= p.hidden_field 'url', :value => photo.url %>
                        <%= p.check_box 'photo'
                    <% end %>
                </span>
            <% end %>
            <%= f.submit 'Submit'  %>
        <% end %>
    </div>
    

    【讨论】:

    • 嗯,这对我来说仍然不起作用,得到“#<:helpers::formbuilder:0x007fd078fcd5a0 url>
    • 啊,是的,我有一个小错字,我已经更正了。与其传递 p.url 作为 url 隐藏字段的值,不如传递 photo.url。请告知这是否能解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多