【问题标题】:Why haml view variable value not changing in Rails为什么haml视图变量值在Rails中没有改变
【发布时间】:2015-01-21 10:51:42
【问题描述】:

我对视图中放置的变量存在问题,即值未更新。 除了@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)

【问题讨论】:

  • 您确定某些未知范围不会干扰获取结果吗?
  • 我已经添加了范围,应该没问题。
  • 你使用的是什么版本的 ruby​​ 和 rails?
  • 导轨:3.2.8,红宝石:1.9.3-p484
  • 请将最后一行更改为" scope :last_ordered, lambda{order("leads.created_at DESC").limit(5)"} "

标签: ruby-on-rails ruby-on-rails-3 haml


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多