我有一个事件模型,它有两个命名范围:

class Event < ActiveRecord::Base
  scope :future, lambda { where('events.date >= ?', Time.zone.now) }
  scope :past, lambda { where('events.date <= ?', Time.zone.now) }
end

我通过创建两个新的 Controller 操作(名为“future”和“past”)从我的 Controller 调用这些范围:

我的 Controller :
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

我也有这些附加操作的 View 和路线。

这工作正常。我的应用程序执行我想要的操作,我可以链接到侧边栏中的新操作,如下所示:
%li
  = link_to 'Events Home', events_path
%li
  = link_to 'Future Events', future_events_path
%li
  = link_to 'Past Events' past_events_path

现在我对这个设置的问题是,虽然它工作得很好,但我不喜欢我必须为这些额外的范围创建新的操作、 View 和路由的事实。我不认为我这样做是正确的。本质上,我正在尝试过滤索引页面上的结果,但我必须创建新的操作、路由和 View 来执行此操作。看起来有点麻烦,我想知道是否有其他方法。

如果我可以取消“ future ”和“过去” Controller 操作,并像这样从 View 中调用范围,那就太好了:
%li
  = link_to 'Events Home', events_path
%li
  = link_to 'Future Events', events_path.future
%li
  = link_to 'Past Events' events_path.past

显然这是行不通的。我见过使用自定义 select_tag 助手的 an example 但我可以完全修改它以在没有选择标签或 JS 的情况下工作...

坚持目前的方法会更好吗

最佳答案

使用基于外部参数的发送有点危险。
我推荐 has_scope gem

关于ruby-on-rails - 我可以将命名范围附加到 Rails 中的链接吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3665325/

10-14 23:01
查看更多