获取 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 第一个。
我目前有一个通过列表数据库搜索的页面。单击选择后,视图 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 第一个。