gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:41:51 24 4
gpt4 key购买 nike

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

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 ”和“过去”)从我的 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

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

还是坚持现在的方法比较好

最佳答案

您可以只有索引操作并将范围作为参数传递,所以您可以这样做:

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

范围可以像这样传递:

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com