我的类方法有问题,并让它在我的新视图中工作

时间:2013-12-31 16:52:00

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

我有一个项目应用程序,其中包含一个包含大约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

我意识到它的老学校,但它奏效了。我仍将研究未来查询的范围。 谢谢那些帮助过的人。

3 个答案:

答案 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

你已经完成了!