我有一个项目应用程序,其中包含一个包含大约100个项目的表<% @projects.each do |project| %>
在我的主视图index.html.erb
中,我列出了所有项目。在我的班级模型中,我写了2个方法让我知道项目是否迟到了?或者duesoon? def late?
和def duesoon
if (actual_date.present && actual_date < Date.today) then true
无论如何,这是一些逻辑。我添加了一些背景颜色样式,以显示红色为迟到,黄色为duesoon。
我的问题是我创建了第二个查看页面,我只想显示Late或DueSoon项目。这应该是相当容易的,但我一直在绞尽脑汁试图使其正常工作。我喜欢这种方法:
class Project
def self.projectLate
where(late: true)
end
end
然后在视图中添加这样的内容:
<% @projects.projectLate.each do |project| %>
我对rails非常陌生,所以感谢帮助尝试设置这个部分。感谢。
的被修改 的
所以我得到了它的工作,虽然我意识到它可能不是最好的方法。
在我的控制器中,我为第二个视图页面创建了def delinquent
。
然后我添加了以下代码:
@projects_temp = Project.order(sort_column + "" + sort_direction)
@projects = []
@projects_temp.each do |project|
if project.late?
@projects.push project
我意识到它的老学校,但它奏效了。我仍将研究未来查询的范围。 谢谢那些帮助过的人。
答案 0 :(得分:1)
您应该认真考虑不使用类似的类方法,而是使用范围。第二件事,你应该改变你的duesoon方法不使用,如果...然后阻止。以下是您的代码的一些建议:
class Project < ActiveRecord::Base
scope :late, lambda { :conditions => ['actual_date IS NOT NULL AND actual_date < ?', Date.today] }
end
然后在控制器中:
class ProjectsController < ApplicationController
def index
@projects = Projects.all
end
end
然后在视图中:
<% @projects.late.each do |project| %>
<%= "Late project #{project}" %>
<% end %>
答案 1 :(得分:0)
试
<% @projects.delinquent.each do |project| %>
<%= project if (project.late? || project.duesoon?) %>
<% end %>
如果您收到任何错误,请告诉我。
答案 2 :(得分:0)
你快到了!
只需更改
即可@projects.delinquent
到
@projects.projectLate.delinquent
你已经完成了!