我在我的应用中实现了事件类别,现在我遇到了以下问题。如果用户输入现有的URL(例如,'site / types / 1'),他将进入所需的类别,但是如果他输入site / types / asdf(一个不存在的URL),他将获得一个空的索引页面,并没有错误。我希望他得到一个404或一个错误页面,我知道如果使用'find_by!',可以通过控制器中的爆炸来实现。方法(对吗?)。但是我的查询不同,我似乎无法弄清楚原理。
如何使用范围和lambdas的更复杂查询来完成此工作?谢谢
我有以下代码:
事件控制器
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
答案 0 :(得分: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
答案 1 :(得分:0)
您可以以RESTful方式使用type
,即
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