0

我正在我的应用程序中实现事件类别,现在我遇到了以下问题。如果用户输入一个现有的 URL(例如,'site/types/1'),他将进入所需的类别,但是如果他输入 site/types/asdf(一个不存在的 URL),他将得到一个空的索引页面,并且没有错误。我希望他得到 404 或错误页面,我知道如果使用“find_by!”,可以通过控制器中的一声巨响来实现。方法(对吗?)。但是我的查询有所不同,我似乎无法弄清楚原理。

如何使用范围和 lambda 进行更复杂的查询?谢谢

我有以下代码:

事件控制器

  def index
    if params[:type]
      @events_future = Event.future_by_type(params[:type])
    else
      @events_future = Event.future_events 
    end
  end

事件模型

scope :future_by_type,   lambda { order(...).where(...) }

路由器

  get 'types/:type', to: 'events#index', as: :type

  resources :types, except: :show
4

2 回答 2

0

你可以抛出一个 404 异常,Rails 会自动重定向到 404.html:

def index
    if params[:type]
      @events_future = Event.future_by_type(params[:type])
    else
      @events_future = Event.future_events 
    end

    #complex query here
    .......

    !@events_future.empty? || raise ActionController::RoutingError.new('Not Found')
end
于 2013-08-14T14:23:04.173 回答
0

您可以type以 RESTful 方式使用,即

resources :types, only: [:index, :show]

在你的TypesController

def index
  @events = Event.future_events
end

def show
  @type = Type.find(params[:id]) # raises RecordNotFound if type doesn't exist
  @events = Event.future_by_type(@type)
end
于 2013-08-14T14:41:49.930 回答