映射和加入视图中的计算值(Rails)
Posted
技术标签:
【中文标题】映射和加入视图中的计算值(Rails)【英文标题】:Map and join in-view calculated value (Rails) 【发布时间】:2018-11-29 20:21:27 【问题描述】:我有一张表,可以为一个产品分配多个相同产品的 rfid_tag 编号。在主表中,这是通过为每个表创建一个连接的标签列表来完成的,并在其他地方进行详细介绍。但是,我有一组计算的 ROI 值,我想以与 rfid_tags 类似的方式列出。
<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(", ") %>
【问题讨论】:
请显示无效的代码。 我可以展示尝试;我试图通过简单地将它包装在 map/join 逻辑中来实现它。 应该是rfid_tags.map
而不是rfid_tag.map
?
只显示整个html文件并说明问题。很难理解你在问什么(这就是为什么有人已经对你投了反对票)。
@moveson 不,它是从管道中正确引用的 - 只是将其更改为 |tag|
以将焦点重新吸引到问题上。发布整个文件似乎过于庞大且无关紧要。我有一个rfid_tag_numbers
方法将.(', ')
标记号连接到一个列表中,我想让来自<%= number_with_precision((product.heritable_rental_price.to_f * tag.product_selections.length) / product.purchase_price.to_f, precision: 2) %>
计算的值的行为方式相同。
【参考方案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>
【讨论】:
这行得通!当它不再识别number_to_precision
时,我不得不进行调整,但 rfid_tags.map |rfid| '%.2f' % ((heritable_rental_price.to_f * rfid.product_selections.length) / purchase_price.to_f ).join(", ")
也能正常工作。谢谢!以上是关于映射和加入视图中的计算值(Rails)的主要内容,如果未能解决你的问题,请参考以下文章
MySQL数据库中的高级(进阶)语句:VIEW视图联集和常见计算
Ruby on Rails 变量在视图中显示 Active Record 数据而不是整数