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

Get rails route to reflect database lisiting

我目前有一个通过列表数据库搜索的页面。单击选择后,视图 link 到该列表的显示页面:

<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>

当前路由为的显示页面:

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

这会给我地址

  localhost3000/listing/612983618 (arbitrary id)

我想要做的是获取路由以在路由中显示来自数据库的信息,以用于 SEO 目的:

  localhost3000/listing/[address]/[booking_id] 

当我尝试调整到

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

我在加载时被阻止。我一直在寻找类似答案的 Whosebug,但到目前为止还没有解决这个问题。由于 link 正在拉取对象本身,并且路由正在从中拉取 id,因此引用 :address 键是有意义的,但显然缺少一些东西。有帮助吗?

为了使 listings#show 的 URI 接收对象的地址和 booking_id,那么您可以将路由定义中的别名移动到 uri 参数,例如:

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

现在它将等待两个属性。在你的控制器中,如果你想从两个发送的属性中找到那个特定的对象,那么你可以使用 find_by:

@listing = Listing.find_by(adress: params[:address], booking_id: params[:booking_id]) 
@listings = Listing.last(3)

请注意,这会起作用,但如果您有多个具有相同地址的记录并且 booking_id,find_by 将只是 return 第一个。