簡體   English   中英

我可以檢查控制器是否從 Rails 中的 AMP 頁面調用?

[英]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.ampindex.html提供一個視圖。

需要明確的是:這也將阻止所有非指定格式! 例如,檢索index.json將得到 405 Not allowed。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM