Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取rails路由以反映数据库列表_Ruby On Rails_Seo_Router_Rails Routing - Fatal编程技术网

Ruby on rails 获取rails路由以反映数据库列表

Ruby on rails 获取rails路由以反映数据库列表,ruby-on-rails,seo,router,rails-routing,Ruby On Rails,Seo,Router,Rails Routing,我目前有一个页面,可以在列表数据库中搜索。单击所选内容时,视图链接到该列表的显示页面: <div class="listings_wrapper"> <% @listings.each do |listing| %> <%= link_to listing_url(listing), class: "listing_link" do %> <div class="listing"> <div class="picture"&g

我目前有一个页面,可以在列表数据库中搜索。单击所选内容时,视图链接到该列表的显示页面:

<div class="listings_wrapper">
<% @listings.each do |listing| %>
  <%= link_to listing_url(listing), class: "listing_link" do %>
  <div class="listing">
    <div class="picture">
      <% if listing.thumbnail != nil %>
        <%= image_tag(listing.thumbnail, class: "list_image") %>
      <% end %>
    </div>
这样我就能知道地址了

  localhost3000/listing/612983618 (arbitrary id)
我想做的是让路由在路由中显示来自数据库的信息,用于SEO目的:

  localhost3000/listing/[address]/[booking_id] 
当我试着适应

  get 'listings/:listing_id', to: 'listings#show', as: 'listing/:address/:booking_id'

我在装货时被堵住了。我一直在寻找类似的答案,但到目前为止还没有意识到这个问题。由于链接正在拉取对象本身,而路由正在从中拉取id,因此引用:address键是有意义的,但显然缺少一些东西。帮助?

为了使
列表的URI显示为接收对象的地址和预订id,您可以将路由定义中的别名移动到URI参数,如:

get 'listing/:address/:booking_id', to: 'listings#show'
现在它将等待两个属性。在控制器中,如果要从两个已发送属性中查找特定对象,则可以使用:


请注意,这将起作用,但如果您有多条记录具有相同的地址和预订id,find_by将只返回第一条记录。

您拥有的别名,将其用作uri,如
get'listing/:address/:booking_id',至:'listings#show'
您应该确保在调用该路由时添加地址和预订id。对,我得到:没有路由匹配(数据库条目)…缺少必需的密钥:[:booking_id]当我尝试这样做时…您正在呈现指向该路由的链接吗?把这一点添加到问题中。可能是视图…我从另一个开发人员那里接管了它,所以我不知道这个特定应用的细节:
ActionView::Template::Error(没有路由匹配{:action=>“show”,:address=>#您从列表对象中从何处获取地址和预订id?如果是,请尝试更明确的
列表url(预订id:listing.booking\id,address:listing.address)
。这项工作正常了!视图中存在冗余,以前阻止它工作(说来话长),但现在看起来很棒。
get 'listing/:address/:booking_id', to: 'listings#show'
@listing = Listing.find_by(adress: params[:address], booking_id: params[:booking_id]) 
@listings = Listing.last(3)