【发布时间】:2010-09-08 07:00:01
【问题描述】:
我有一个有两个命名范围的事件模型:
class Event < ActiveRecord::Base
scope :future, lambda { where('events.date >= ?', Time.zone.now) }
scope :past, lambda { where('events.date <= ?', Time.zone.now) }
end
我通过创建两个新的控制器操作(名为“未来”和“过去”)从我的控制器调用这些范围:
我的控制器:
class EventsController < InheritedResources::Base
actions :index, :show, :future, :past
has_scope :future
has_scope :past
def future
index! { @events = Event.future }
end
def past
index! { @events = Event.past }
end
end
我也有这些额外操作的视图和路线。
这很好用。我的应用程序做我想做的事,我可以链接到侧边栏中的新操作,如下所示:
%li
= link_to 'Events Home', events_path
%li
= link_to 'Future Events', future_events_path
%li
= link_to 'Past Events' past_events_path
现在我对这个设置的问题是,虽然它工作得很好,但我不喜欢我必须为这些额外的范围创建新的操作、视图和路由的事实。我不认为我这样做是正确的。本质上,我正在尝试过滤索引页面上的结果,但我必须创建新的操作、路由和视图来执行此操作。这似乎有点麻烦,我想知道是否有另一种方法。
如果我可以取消“未来”和“过去”的控制器操作并像这样从视图中调用作用域,那就太好了:
%li
= link_to 'Events Home', events_path
%li
= link_to 'Future Events', events_path.future
%li
= link_to 'Past Events' events_path.past
显然这行不通。我见过 an example 使用自定义 select_tag 帮助器,但我可以完全修改它以在没有选择标签或 JS 的情况下工作...
还是坚持现在的方法比较好
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 has-scope