添加指向控制器中数组的方法的链接

时间:2014-03-25 04:23:58

标签: ruby-on-rails ruby arrays

我的rails 4应用程序控制器中有一个索引方法,如下所示:

def index
   @products = Product.all
   @headers = @products.map(&:data).flat_map(&:keys).uniq
   @product_data = @products.map{ |product| product[ :data ].values }
end

所以@product_data的结果如下:

[["Table", "$199.99", "blue"], ["Book", "$9.99", "green"]]

在我看来,我把所有这些放在一个无序列表中。但现在我想为每个产品添加一个link_to编辑和删除页面。如何将其包含在我的数组中,以便在视图页面上显示每个产品的链接?

2 个答案:

答案 0 :(得分:1)

您可以将product_id添加到product[:data].values数组的结果中。然后使用product_id作为product url_helpers的参数。

@product_data = products.map{ |product| product[ :data ].values.unshift(product.id) }

这应该给你类似的东西:

[[1, "Table", "$199.99", "blue"], [2, "Book", "$9.99", "green"]]

答案 1 :(得分:1)

我发现那里没有使用@product_data。为什么你不能在index.html.erb的表格中显示数据,你可以遍历每个产品,以便修改和删除链接。假设您的产品型号具有namepricecolor属性,只需执行像这样

在index.html.erb中:

<table border=1>

    <tr>
        <th>Product Name</th>
        <th>Product Price</th>
        <th>Product Color</th>
        <th></th>
        <th></th>
    </tr>
        <% @products.each do |p| %>
        <tr>
        <td><%=p.name %></td>
        <td><%=p.price %></td>
        <td><%=p.color %></td>
        <td><%=link_to 'Edit', :action => "edit", :id => p.id %></td>
        <td><%=link_to 'Delete', :action => "delete", :id => p.id, :confirm => "Are you sure?" %></td>
    </tr>
     <% end %>
</table>

注意: 它只是另一种方法。