1

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

现在一般来说,我有一个主页、一个搜索页面和一个列表的详细信息页面。因此,相应的 URL 是officespace/home, officespace/search?conditions,officespace/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。无论如何,请帮助我。请不要让我参考手册。我已经阅读了它们,但它们没有提供任何直接帮助。

4

1 回答 1

0

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

路线.rb

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

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

search_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模型设置与我的任意猜测完全相同的情况下才有效,但希望您可以从那里开始工作以确定您的代码需要看起来像什么。请注意,我无法在其中获得下划线。据我所知,这些路线只匹配由斜杠分隔的段。继续努力,你可能会找到解决办法。

于 2013-02-16T08:16:56.297 回答