如何在Rails中的单独视图页面上仅显示“特定”项目?

时间:2013-12-27 18:05:04

标签: ruby-on-rails

在我的 index.html.erb 页面上,我列出了所有项目@projects = Project.order(),并编写了代码以确定项目是“dueSoon”还是“Late” “并添加了样式。现在我创建了一个名为“Delinquent”的第二个视图页面,我只想显示迟到或者是duesoon的项目。我试图找出最好/最干净的方式来显示它。这是我的索引视图中的代码:

<table class....
...
<% @projects.each do |project| %>
<% colorClass = project.late? ? "late" : project.dueSoon? ? "dueSoon" : "ok" %>
 <tr>
   <td class=<%= colorClass %>><%= link_to project.product, project %></td>
 ....
 ...

现在我知道我希望我的逻辑类似于IF(项目)=迟到或者duesoon然后是真实的(显示项目。我只是不是100%确定最好的编码方式。

谢谢。

我查看了您附加的Active Record Querying链接。我正在查看范围部分14.2合并范围。看起来我可以这样做:

class Project < ActiveRecord::Base
 scope :late, -> { where(late: true) }
 scope :duesoon, -> { where(duesoon: true) }
 end 

然后我看来我可以通过Projects.late.duesoon

合并它们

如果这个逻辑看起来有些准确,请告诉我。感谢

2 个答案:

答案 0 :(得分:0)

一种方法是向Project添加delinquent类方法。

你的模特中有这样的东西:

class Project               
  def self.delinquent
    where(delinquent: true)
  end
end

然后在你看来是这样的:

<% @projects.delinquent.each do |project| %>

答案 1 :(得分:0)

另一种方法是在项目模型中定义范围:

class Project < ActiveRecord::Base
  scope :displayable, where(:displayable => true)
  ...
end

从Rails指南:“作用域允许您指定常用的查询,这些查询可以作为关联对象或模型上的方法调用引用。使用这些范围,您可以使用之前涵盖的每个方法,例如where,join和includes所有范围方法都将返回一个ActiveRecord :: Relation对象,该对象将允许在其上调用更多方法(例如其他范围)。“

http://guides.rubyonrails.org/active_record_querying.html

在模型/控制器代码中,您可以使用

 Project.displayable

触发查询。