我目前在我的@tasks上使用.find_by_status(params [:status])来查找未关闭或粘滞的任务。 (4,5)。
def self.find_by_status(status)
status = status.to_i
if status == 0 then
status = 1
else
status = status
end
if status == 1 || !status then
Task.where(["STATUS NOT IN (4,5)"])
else
Task.where(:status => status)
end
end
我也为我的门票模型复制了这个,只在主页上找到打开的门票。
它也伴随着这个
<% status_active = 1 %>
<% Task.new.statuses.each do |status| %>
<li class="<%= if (params[:status].to_i || status_active) == status[0] then "active" end %>">
<%= link_to status[1], :controller => params[:controller], :action => params[:action], :params => { :status => status[0] } %>
</li>
我是rails的新手,我真的在努力重构这个。我可能更喜欢将这些链接变成一个下拉选择过滤器,但我也很挣扎。
感谢任何帮助!
答案 0 :(得分:1)
此片段:
def self.find_by_status(status)
if status.to_i.zero?
Task.where(["STATUS NOT IN (4,5)"])
else
Task.where(:status => status.to_i)
end
end
与您的上述代码相同(在您投射to_i
后,状态无法为false。)
您可以将视图代码清理为:
<% Task.new.statuses.each do |status| %>
<li class="<%= 'active' if (params[:status].to_i || Task::STATUS_ACTIVE) == status[0] %>">
<%= link_to status[1], :controller => params[:controller], :action => params[:action], :params => { :status => status[0] } %>
</li>
<% end %>
我建议在模型中添加STATUS_ACTIVE作为常量,而不是将其编码到视图中。
此外,您通过param指定控制器和操作的事实很奇怪,但是如果不了解您的用例,我无法解决这个问题。