Ruby on rails 检查上次保存的忽略Object.new的项目
我有一个标准的Rails视图,在Ruby on rails 检查上次保存的忽略Object.new的项目,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个标准的Rails视图,在new.html.erb页面上的日期条件上显示一个警告框 <% if @user.items.last.issue_date + 2.years > Date.today %> ...show warning... <% end %> 看来我可以通过这样做来解决这个问题 <% if @user.items.offset(0).last.issue_date + 2.years > Date.today %>
new.html.erb
页面上的日期条件上显示一个警告框
<% if @user.items.last.issue_date + 2.years > Date.today %>
...show warning...
<% end %>
看来我可以通过这样做来解决这个问题
<% if @user.items.offset(0).last.issue_date + 2.years > Date.today %>
Date.day%>
但这似乎根本不应该起作用,因为博士后的医生说
因此,我有两个问题:
- 是否有更好的方法只检查保存在数据库中的记录
- 为什么ActiveRecord偏移量调用行为(显然)与Postgres医生所说的应该是不同的
@item
位于您的@user.items
集合中,但尚未保存到数据库中
这就是添加.offset(0)
对您有效的原因,因为与.where()
子句一样,您正在将返回的记录的条件更改为仅从数据库返回的记录,而您的新记录不是其中之一
另一种过滤方法如下:
@user.items.reject(&:new_record?).last
@user.items.
where('issue_date < ?', 2.years.ago).
order(issue_date: :desc).
limit(1).
last
或者这个:
@user.items.reject { |item| item == @item }.last
但是,.reject
的性能不如从数据库中提取大量数据或记录
否则,您所拥有的将起作用,但我将使用一个不那么脆弱(偏移量可能会改变)且更能揭示意图的查询,如下所示:
@user.items.reject(&:new_record?).last
@user.items.
where('issue_date < ?', 2.years.ago).
order(issue_date: :desc).
limit(1).
last
您在控制器中引入的新
@item
位于您的@user.items
集合中,但尚未保存到数据库中
这就是添加.offset(0)
对您有效的原因,因为与.where()
子句一样,您正在将返回的记录的条件更改为仅从数据库返回的记录,而您的新记录不是其中之一
另一种过滤方法如下:
@user.items.reject(&:new_record?).last
@user.items.
where('issue_date < ?', 2.years.ago).
order(issue_date: :desc).
limit(1).
last
或者这个:
@user.items.reject { |item| item == @item }.last
但是,.reject
的性能不如从数据库中提取大量数据或记录
否则,您所拥有的将起作用,但我将使用一个不那么脆弱(偏移量可能会改变)且更能揭示意图的查询,如下所示:
@user.items.reject(&:new_record?).last
@user.items.
where('issue_date < ?', 2.years.ago).
order(issue_date: :desc).
limit(1).
last
太好了,谢谢你的回答和增加的洞察力!太好了,谢谢你的回答和增加的洞察力!