在我的 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
如果这个逻辑看起来有些准确,请告诉我。感谢
答案 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
触发查询。