我有一张表,可以为一个产品分配相同产品的多个rfid_tag号。在主表中,这是通过为每个表创建标签的联接列表并在其他位置进行详细说明来完成的。但是,我想以与rfid_tags类似的方式列出一组计算出的ROI值。
<td>
<%= product.rfid_tag_numbers %>
</td>
<%product.rfid_tags.each do |tag| %>
<td>
<%= number_with_precision((product.heritable_rental_price.to_f * tag.product_selections.length) / product.purchase_price.to_f, precision: 2) %>
</td>
<%end%>
rfid_tag_numbers
在Product
模型中定义为:
belongs_to :ancestor_product, :class_name => "Product"
def rfid_tag_numbers
rfid_tags.map{|rfid| "##{rfid.short_number}"}.join(", ")
end
仅映射计算和联接(如标记号)还不够。就目前而言,它一次只能为列表提供一个单元格,这并不理想-我错过了什么?
映射尝试1:
<%= rfid_tag.map{|item| number_with_precision((item.heritable_rental_price.to_f * rfid_tag.product_selections.length) / item.purchase_price.to_f, precision: 2)}.join(", ") %>
答案 0 :(得分:1)
在定义了rfid_tag_numbers
的模型中,您可以添加一个新方法来复制相似类型的地图:
def rfid_tag_numbers_with_precision
rfid_tags.map { |rfid| number_with_precision((heritable_rental_price.to_f * rfid.product_selections.length) / purchase_price.to_f, precision: 2) }.join(", ")
end
您应该能够以与其他方法相同的方式在视图中调用它:
<td>
<%= product.rfid_tag_numbers_with_precision %>
</td>