2017-05-04 56 views
0

在我的Rails应用程序我生成一个URL,它的正确的模式如下:如何在rails应用程序中将特定的url模式发送到404?

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 

基本上在两个链接的主要内容是,除了在页脚的JavaScript分页内容相同。这导致SEO优化的问题。我怎样才能发送与第二种模式的网址,即与?page=2404页?有没有办法从轨道路线文件做到这一点?

回答

1

如果您特别想查找名为page的查询参数,并引发异常以激活404响应(如果该请求不是来自JavaScript的AJAX调用),则可以在您的操作之前执行此操作EquipmentDetailsController(或其他所谓的)。

class EquipmentDetailsController < ApplicationController 
    before_action :send_to_404, only: [:name] # or whatever the action is called 

    def send_to_404 
    if !request.xhr? && !params[:page].nil? 
     raise ActionController::RoutingError.new('Not Found') 
    end 
    end 
end 
+0

请检查我添加了控制器方法 – user3576036

+0

那'name'在URL实际上不是一个控制器方法名,但是从'friendly_id了'slug' ' – user3576036

0

你可以通过发送404时params[:page] == 2

render plain: "record was not found", status: :not_found 

但是,你不应该简单地发出一个404,当你不希望谷歌对网页进行索引(实际上确实存在) 。 Google evaluates javascript these days as well

考虑添加noindex header to the page和/或使用a canonical url reference

<meta name="robots" content="noindex"> 
<link rel="canonical" href="https://example.com/equipment_details/name"> 
相关问题