Ruby on rails 如何在rails应用程序中向404发送特定的url模式?

Ruby on rails 如何在rails应用程序中向404发送特定的url模式?,ruby-on-rails,Ruby On Rails,在我的rails应用程序中,我生成了一个url,其正确模式如下: https://example.com/equipment_details/slug 这是谷歌应该索引的url。但由于使用javascript实现分页,平台上还有另一个活动url,如下所示: http://localhost:3000/equipment_details/slug?page=2 控制器方法如下: class EquipmentsController < ApplicationController def

在我的rails应用程序中,我生成了一个url,其正确模式如下:

https://example.com/equipment_details/slug

这是谷歌应该索引的url。但由于使用javascript实现分页,平台上还有另一个活动url,如下所示:

http://localhost:3000/equipment_details/slug?page=2

控制器方法如下:

class EquipmentsController < ApplicationController
  def equipment_details
    @equipment = Equipment.friendly.active.includes(:country, :manufacturer, :category, :user).find(params[:id])
    if @equipment
      @products = @equipment.category.equipments.active.where.not("equipment.id = ?", @equipment.id)
      @countries = Country.active.all
      @states = State.active.all
      @cities = City.active.all
      @services = Service.active.where("category_id = ? AND sub_category_id = ? AND country_id = ? AND state_id = ? AND city_id = ?", @equipment.category_id, @equipment.sub_category_id, @equipment.country_id, @equipment.state_id, @equipment.city_id)
      respond_to do |format|
        format.js
        format.html
        format.pdf do
          render :pdf => "vendaxo_#{@equipment.title}",
                 :layout => 'equipment_details_pdf.html.erb',
                 :disposition => 'attachment'
        end
      end
    else
      flash[:error] = "Equipment not found."
      redirect_to root_path
    end
  end
end
类设备控制器“vendaxo_35;{@equipment.title}”,
:layout=>“设备详细信息”pdf.html.erb“,
:disposition=>“附件”
结束
结束
其他的
闪存[:错误]=“未找到设备。”
将\重定向到根\路径
结束
结束
结束

基本上,除了页脚中的javascript分页内容外,两个url上的主要内容是相同的。这导致了SEO优化中的问题。如何将带有第二种模式的url(即带有
?page=2
的uel)发送到
404
页面?有没有从rails routes文件中执行此操作的方法?

如果您特别想查找名为
page
的查询参数并引发异常以激活404响应(如果该请求不是来自javascript的AJAX调用),您可以在
设备详细信息控制器中的before操作中执行此操作(或者叫什么名字)

类设备详细信息控制器
您可以使用when
参数[:page]==2发送404:

render plain: "record was not found", status: :not_found
然而,当你不想让谷歌为页面编制索引时,你不应该简单地发送404

考虑添加和/或使用:



请检查我添加的控制器方法,url中的
name
实际上不是控制器方法名称,而是
friendly\u id中的
slug
render plain: "record was not found", status: :not_found
<meta name="robots" content="noindex">
<link rel="canonical" href="https://example.com/equipment_details/name">