根据不同的条件,在轨道上更改红宝石中的URL

时间:2013-02-16 06:40:49

标签: ruby-on-rails url routes

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

现在一般来说,我有一个主页,一个搜索页面和一个列表的详细页面。因此,相应的网址为officespace/homeofficespace/search?conditionsofficespace/detailpage?id=(controller-officespace)[&Conditions eg.---price,size,place,type...]

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

现在我希望如果客户只询问地点并且没有提及大小,价格等,则网址应为/listing/location_name

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

B.t.w。 (我已经有一个名为listings的控制器,其目的是其他的。)

等等...........实际上,我想更改许多内容的网址。无论如何,请帮助我。请不要将我推荐给手册。我已经阅读过它们并没有给予任何直接帮助。

1 个答案:

答案 0 :(得分:0)

这是一个有趣的路由挑战。从本质上讲,您的目标是创建一个特殊的表达式,以匹配您要在用户的浏览器中显示的URL类型。这些表达式将用于match中的config/routes.rb公式中。然后,您需要确保相关搜索页面上的表单操作和链接链接到那些专用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模型的设置方式与我的任意猜测完全相同时才有效,但希望您可以从那里开始计算代码需要的样子。请注意,我无法在那里获得下划线。据我所知,路由只匹配用斜杠分隔的段。继续努力,你可能会找到一条路。