【发布时间】:2018-02-25 16:24:57
【问题描述】:
我目前有一个通过列表数据库搜索的页面。单击选择时,视图链接到该列表的显示页面:
<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'
我在加载时被阻止。我一直在寻找类似答案的stackoverflow,但到目前为止还没有解决这个问题。由于链接是在拉取对象本身,而路由是从中拉取 id,所以改为引用 :address 键是有意义的,但显然缺少一些东西。帮忙?
【问题讨论】:
-
您拥有的别名,将其用作 uri,例如
get 'listing/:address/:booking_id', to: 'listings#show',您应该确保在调用该路由时添加地址和 booking_id。 -
对,我得到:没有路由匹配(数据库条目)....缺少必需的键:[:booking_id] 当我尝试...
-
您是否正在呈现指向该路线的链接?将其添加到问题中。
-
可能是视图...我从另一个开发者那里接手了这个,所以我不知道这个特定应用程序的来龙去脉:
ActionView::Template::Error (No route matches {:action=>"show", :address=>#<Listing id: 1, booking_id: "N4043290", ........address: "sample_address", ......">, :controller=>"listings"} missing required keys: [:booking_id]): 120: <% @listings.each do |listing| %> 121: <%= link_to listing_url(listing), class: "listing_link" do %> 122: <div class="listing"> 124: <% if listing.thumbnail != nil %> -
地址和booking_id是从哪里得到的?从列表对象?如果是这样,请尝试更明确的
listing_url(booking_id: listing.booking_id, address: listing.address)。
标签: ruby-on-rails seo router rails-routing