代码之家  ›  专栏  ›  技术社区  ›  stephenmurdoch

我可以将命名范围附加到Rails中的链接吗?

  •  3
  • stephenmurdoch  · 技术社区  · 14 年前

    我有一个事件模型,它有两个命名作用域:

    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\u标记助手,但我可以修改它,使其在没有select标记或JS的情况下工作。。。

    还是坚持现在的方法好

    2 回复  |  直到 9 年前
        1
  •  4
  •   acmeira    12 年前

    使用基于外部参数的send有点危险。 我推荐 has_scope 宝石

        2
  •  5
  •   jordinl    14 年前

    您只能使用索引操作并将作用域作为参数传递,因此可以执行以下操作:

    Event.send(params[:scope] : 'all')
    

    link_to "Future events", events_path(:scope => "future")