为什么 haml 视图变量值在 Rails 中没有改变

Why haml view variable value not changing in Rails

我对在值未更新的视图中放置的变量有疑问。 除了 @last_leads 之外,此视图中使用的所有值都保持相同的值,直到我重新生成缓存(在我的例子中,这意味着使用 capistrano 进行部署)。 @last_leads 正在正确刷新。

视图中没有 cache 个标签。

有什么想法吗?

控制器:

 class SomeClass
    def show
      lead_scope = current_provider.leads
      @today_leads = lead_scope.today
      @yesterday_leads = lead_scope.yesterday
      @earlier_this_week_leads = lead_scope.earlier_this_week
      @current_week_leads = lead_scope.current_week
      @previous_week_leads = lead_scope.previous_week
      @last_leads = lead_scope.last_ordered
    end
  end

查看:

%h1 Dashboard
  .box.emphasised.clearfix

    .number-info.width-100
      .value= @today_leads.count
      Today

    .number-info.width-100
      .value= @yesterday_leads.count
      Yesterday

    .number-info.width-100
      .value= @current_week_leads.count
      This week

    .number-info.width-100
      .value= @previous_week_leads.count
      Previous week

  .box.emphasised.clearfix
      %table.generic-table.coloured.leads-list
        -@last_leads.each do |lead|
          %tr
            %td.centered= lead.created_at.to_s :short_db
            %td.cell-width-20= lead.service_choice.service.name
            %td.centered.cell-width-20= lead.phone

范围如下:

 scope :today, where("leads.created_at > ?", Time.now.beginning_of_day)
  scope :yesterday, where("leads.created_at between ? AND ?", 1.day.ago.beginning_of_day, Time.now.beginning_of_day)
  scope :earlier_this_week, where("leads.updated_at between ? AND ?", Time.now.beginning_of_week, 1.day.ago.beginning_of_day)
  scope :current_week, where("leads.created_at between ? AND ?", Time.now.beginning_of_week, Time.now.end_of_week)
  scope :previous_week, where("leads.created_at between ? AND ?", 1.week.ago.beginning_of_week, 1.week.ago.end_of_week)
  scope :last_ordered, order("leads.created_at DESC").limit(5)

您的模型一旦读取就会得到评估,因此在没有创建 lambda 的情况下,它将被修复并且永远不会改变。但是对于 lambda,它确定运行时的结果意味着更新值。