仅报告每个项目的模型的第一个事件-Rails模型/视图

时间:2018-11-29 03:32:28

标签: ruby-on-rails ruby methods view model

当产品具有多个产品选择时,我正在研究一个问题。我正在尝试报告产品的历史记录-其中一个方面包括第一次选择阵列中的每个产品,以确定该产品已经流通了多长时间。

在我的product_selection模型中:

belongs_to :product
def time_since_first_use
  (Time.now - self[0].staged_at)
end 
# staged_at is a datetime attribute

然后产品模型对此进行说明:

def tag_time_since_first_use
  self.product_selections.time_since_first_use
end 

然后尝试在视图中呈现它(简化了常规格式):

<% @products.order(created_at: :desc).each do |product| %>
   <%= humanize_seconds(product.tag_time_since_first_use)%>
<%end%>

我最初在产品模型上选择了[0],它为产品列表中的每个项目都提供了一个重复的值。我该如何解决?

1 个答案:

答案 0 :(得分:1)

class Product
  def tag_time_since_first_use
    Time.now - product_selections.order(staged_at: :asc).first.staged_at
  end
end

如果您经常使用tag_time_since_first_use,则在为产品创建第一个staged_at时,最好将值保存在产品的product_selection属性中避免每次查询。