【问题标题】:Get rails route to reflect database lisiting获取rails路由以反映数据库列表
【发布时间】: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=&gt;"show", :address=&gt;#&lt;Listing id: 1, booking_id: "N4043290", ........address: "sample_address", ......"&gt;, :controller=&gt;"listings"} missing required keys: [:booking_id]): 120: &lt;% @listings.each do |listing| %&gt; 121: &lt;%= link_to listing_url(listing), class: "listing_link" do %&gt; 122: &lt;div class="listing"&gt; 124: &lt;% if listing.thumbnail != nil %&gt;
  • 地址和booking_id是从哪里得到的?从列表对象?如果是这样,请尝试更明确的listing_url(booking_id: listing.booking_id, address: listing.address)

标签: ruby-on-rails seo router rails-routing


【解决方案1】:

为了使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 将只返回第一个。

【讨论】:

  • 搞定了!之前的视图中存在冗余阻止它工作(长话短说),但现在看起来很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多