[英]Can I Check if a Controller is Being Called from an AMP page in Rails?
我开始在我的 Rails 5.2 应用程序中实现 AMP 页面。 在桌面上,我使用 Will Paginate gem。
但是,对于 AMP,我使用的是框架的无限滚动 JS,我不想对结果进行分页。
因此,在控制器操作中,我想确定用户是否正在查看 AMP 页面(URL 以.amp
)以确定我对这一行的内容(包括分页或排除):
@products = @products.order('price DESC, RANDOM()').paginate(page: params[:page], per_page: 24)
我该怎么做呢?
简单的解决方案就是测试request.format
。 所以你可以写
if request.format == :amp
# do not paginate
else
# all other formats we paginate
end
但是在控制器内部,我们也可以使用显式respond_to
块:
def index
respond_to do |format|
format.amp do
@products = @products.order('price DESC, RANDOM()')
end
format.html do
@products = @products.order('price DESC, RANDOM()').paginate(page: params[:page], per_page: 24)
end
end
end
这将明确指定控制器方法接受和响应的所有格式。
您可能已经这样做了,但是您必须为index.amp
和index.html
提供一个视图。
需要明确的是:这也将阻止所有非指定格式! 例如,检索
index.json
将得到 405 Not allowed。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.