【问题标题】:Changing urls in ruby on rails depending on different conditions根据不同的条件更改 ruby​​ on rails 中的 url
【发布时间】:2013-02-01 04:44:11
【问题描述】:

我是 ruby​​ on rails 的新手....我想知道是否有办法根据客户的响应更改显示的 URL。我的意思是......这是一个例子: 我正在制作一个项目,在各个地方显示列表...

现在通常我有一个主页、一个搜索页面和一个列表的详细信息页面。所以,相应的 URL 是officespace/homeofficespace/search?conditionsofficespace/detailpage?id=(controller-officespace)[&Conditions eg.---price,size,place,type...]

因此,每次客户端发出搜索请求时,都会显示相同的 URL,当然还有给定的条件。

现在我希望,如果客户只询问地点,而没有提及尺寸、价格等,则 url 应该是 /listing/location_name

如果他提到其他条件,那就是listing/(office_type)/size(x sq feet)_office_for_rent_in_locationname)

顺便说一句。 (我已经有一个名为 listings 的控制器,它的用途是别的。)

等等............实际上,我想更改一些事情的 URL。无论如何,请帮助我。请不要让我参考手册。我已经阅读了它们,但它们没有提供任何直接帮助。

【问题讨论】:

    标签: ruby-on-rails url routes


    【解决方案1】:

    这是一个有趣的路由挑战。本质上,您的目标是创建一个特殊的表达式,以匹配您希望在用户浏览器中显示的 URL 类型。这些表达式将用于config/routes.rb 中的match 公式。然后,您需要确保相关搜索页面上的表单操作和链接链接到那些专门的 URL,而不是默认页面。这是一个入门示例:

    routes.rb

    match "/listing/:officeType/size/:squarefeet/office_for/:saleOrRent/in/:locationName" => "searches#index"
    match "/listing/*locationName" => "searches#index"
    resources :searches
    

    由于您明确提到您的listings 控制器用于其他用途,我只是将我们的新控制器命名为searches。在此控制器的 index 方法的代码中,您必须决定如何收集相关数据以传递给您的视图。在上面的match 表达式中标记为: 的所有内容都将在params 散列中传递给控制器​​,就好像它是一个HTTP GET 查询字符串参数一样。因此我们可以做到以下几点:

    searches_controller.rb

    def index
      if params[:squarefeet] && params[:officeType] && params[:locationName]
       @listings = Listing.where("squarefeet >= ?", params[:squarefeet].to_i).
                   where(:officeType => params[:officeType],
                         :locationName => params[:locationName])
      elsif params[:locationName]
         @listings = Listing.where(:locationName => params[:locationName])
      else
         @listings = Listing.all
      end
    end
    

    并将用户发送到这些链接之一:

    视图/搜索/index.html.erb

    <%= link_to "Click here for a great office!", "/listing/corporate/size/3200/office_for/rent/in/Dallas" %>
    

    只有当你的Listing 模型的设置方式与我的任意猜测完全相同时,上面的示例才有效,但希望你可以从那里开始工作以确定你的代码需要是什么样子。请注意,我无法在其中获得下划线。据我所知,这些路线只匹配由斜杠分隔的段。继续努力,你可能会找到解决办法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多