gpt4 book ai didi

ruby-on-rails - 条件子句中的 ActiveRecord 关联缓存日期值

转载 作者:行者123 更新时间:2023-12-04 06:15:19 25 4
gpt4 key购买 nike

我的 Account 模型有以下两个关联:

has_many  :expenses, 
:order => 'expenses.dated_on DESC',
:dependent => :destroy

has_many :recent_expenses,
:class_name => 'Expense',
:conditions => "expenses.dated_on <= '#{Date.today}'",
:order => 'dated_on DESC',
:limit => 5

在我的一个观点中,我正在渲染最近的开支:

<% @account.recent_expenses.each do |expense| %>
...
<% end %>

在我的开发机器上,在登台服务器(以生产模式运行)以及生产控制台上,@account.recent_expenses 返回正确的列表。但是,在我们的现场生产服务器上,不会返回最近的费用。

如果我在 View 中将 @account.recent_expenses 替换为 @account.expenses,则会显示最近的费用,所以我猜条件子句的 #{Date.today} 部分在第一次执行时以某种方式被缓存。如果我重新启动生产 Mongrel 集群,所有最新费用都会正确返回。

谁能想到为什么会发生这种情况以及我如何更改 :recent_expenses 查询以防止这种情况发生?

我正在使用 Rails 2.1.0。

最佳答案

Rails 在加载时构建查询,然后在您每次调用 @account.recent_expenses 时重新使用该查询,这正是您遇到的情况。

如果您使用的是 Rails 2.1,则可以使用 named_scope 来实现您想要的。

在您的费用模型中,输入以下内容:

named_scope :recent, lambda { {:conditions => ["expenses.dated_on <= ?", Date.today], :order => 'dated_on DESC', :limit => 5 } }

lambda 用于确保 Rails 每次都重建查询。

从您的帐户删除:

has_many :recent_expenses ...

然后调用:

<% @account.expenses.recent.each do |expense| %>
...
<% end %>

关于ruby-on-rails - 条件子句中的 ActiveRecord 关联缓存日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/177613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com