【问题标题】:Rails repeat block - different values each timeRails重复块 - 每次不同的值
【发布时间】:2014-11-29 02:42:05
【问题描述】:

我有一段代码需要重复 20 次例如:

    <div class="block">
        <%= link_to root_path do %>
            <h2>Title</h2>
            <%= image_tag 'image.jpg' %>
         <% end %>
    </div>

只有&lt;h2&gt;Title&lt;/h2&gt;&lt;%= image_tag 'image.jpg' %&gt; 会改变。

我正在考虑使用所有值的数组并将它们传递给产量,我需要为块创建一个部分并重复它,但我不确定最好的解决方案。因此,如果有人能指出正确的方向,那就太好了。

谢谢!

【问题讨论】:

  • 我个人希望看到错误的版本,我相信 SO 社区也是如此。建议添加您对解决方案的尝试。
  • 你能告诉我们title和image_tag的值变化吗?索引号和它们的值有什么关系吗?

标签: ruby-on-rails loops block yield


【解决方案1】:

您可以通过在控制器中创建标准 Ruby 对象来传递数据 - 即

@images = [
 {
  :title => 'Image One',
  :file => 'image1.jpg'
 },
 {
  :title => 'Image Two',
  :file => 'image2.jpg'
 }
 ...
]

然后在你的主视图中:

<div class="block">
    <%= link_to root_path do %>
      <%= render "shared/images", :images => @images %>
    <% end %>
</div>

最后在你的部分shared/_images.html.erb

<% @images.each do |image| %>
 <h2><%= image.title %></h2>
 <%= image_tag image.file %>
<% end %>

【讨论】:

    【解决方案2】:

    您可以使用 ROR 部分的集合呈现功能。

    假设您有一个名为 Image 的 AR 模型,其中包含 titleimage_url 字段, @images 包含 Image 对象数组:

    <div class="block">
      <%= link_to root_path do %>
        <%= render partial: "meta_info", collection: @images %>
      <% end %>
    </div>
    

    _meta_info.html.erb

    <h2><%= meta_info.title %></h2>
    <%= image_tag meta_info.image_url %>
    

    参考

    在下面的页面中查找渲染集合部分:

    http://guides.rubyonrails.org/layouts_and_rendering.html

    【讨论】:

      猜你喜欢
      • 2019-01-05
      • 2023-02-04
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 2018-12-09
      • 2018-08-02
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多