我是ruby on rails的新手....我想知道是否有办法根据客户端的响应更改显示的URL。我的意思是......这是一个例子: 我正在制作一个项目,在各个地方展示列表...
现在一般来说,我有一个主页,一个搜索页面和一个列表的详细页面。因此,相应的网址为officespace/home
,officespace/search?conditions
,officespace/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
的控制器,其目的是其他的。)
等等...........实际上,我想更改许多内容的网址。无论如何,请帮助我。请不要将我推荐给手册。我已经阅读过它们并没有给予任何直接帮助。
答案 0 :(得分:0)
这是一个有趣的路由挑战。从本质上讲,您的目标是创建一个特殊的表达式,以匹配您要在用户的浏览器中显示的URL类型。这些表达式将用于match
中的config/routes.rb
公式中。然后,您需要确保相关搜索页面上的表单操作和链接链接到那些专用URL而不是默认页面。这是一个开始的例子:
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
查询字符串参数一样。因此,我们可以做到以下几点:
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
并将用户发送到以下链接之一:
<%= link_to "Click here for a great office!", "/listing/corporate/size/3200/office_for/rent/in/Dallas" %>
上述示例仅在您的Listing
模型的设置方式与我的任意猜测完全相同时才有效,但希望您可以从那里开始计算代码需要的样子。请注意,我无法在那里获得下划线。据我所知,路由只匹配用斜杠分隔的段。继续努力,你可能会找到一条路。