Rails 5 条路线,url 问题
Rails 5 route, url issue
我在尝试让 link_to 在我的应用程序上更改路线后工作时遇到问题。这可能是一个简单的问题,但老实说,我看不到仅 linking 到 link_to 与对象名称将无法像以前在路由更改之前那样工作。
背景:我正在使用 friendly_id gem(不确定在手动更改 url 后我是否仍然需要它)。
我也在其中使用 Ancestory gem。
在前置应用程序上。我有一个仅用于索引和显示的列表资源。请参阅以下路线以及以前的工作路线。
# Front facing resources
scope "/:category_name/:category_id" do
resources :listings, only: [:show], path: '/:title'
end
resources :listings, only: [:index]
之前(工作正常)
# Front facing resources
resources :listings, only: [:index, :show]
resources :auctions, only: [:index, :show]
我已经成功地让我的 url 显示了以下结果:
listing GET /:category_name/:category_id/:title/:id(.:format) listings#show
结果:
http://localhost:3000/listings/helicopter/test-one/4
暂时先这样。我还在想结局 url。因此,我可以创建列表并在浏览器中手动输入 url 来查看它。
当我查看列表的索引页面并且我有 link_to
时出现错误
当前代码:
<%= link_to listing.title, listing %>
错误:
No route matches {:action=>"show", :controller=>"listings"}, missing required keys: [:category_id, :category_name, :id, :title]
如何将这些必需的键添加到 link_to 助手?我尝试了很多方法,但并不遥远。我假设只改变 show 路由不会对任何以前的控制器方法造成太多干扰,并且列表仍然可以通过 id 找到。
任何方向都很好。太感谢了。
*** 更新 ****
好的,所以在发送上面的内容之前,我仔细查看并让它工作,但是我想问有没有更简洁的方法来做到这一点?只是看起来不太像"The Rails way"。我的最终目标是拥有一个长的 SEO 友好 link,其中包含类别和可能的子类别。
工作代码:
<%= link_to listing.title, listing_path(category_name: "listings", category_id: listing.category.name, title: listing.title.parameterize, id: listing.id) %>
结果:
http://localhost:3000/listings/Aircraft/twin-piston-jet/1
有什么想法吗???
你可以为此使用助手https://api.rubyonrails.org/classes/ActionController/Helpers.html
app/helpers/listing_helper.rb
module ListingHelper
def listing_route(listing, category_name = "Listings")
listing_path(category_name: listing, category_name: listing.category.name, title: listing.title.parameterize, id: listing.id)
end
end
关于您的看法
<%= link_to listing.title, listing_route(listing) %>
我在尝试让 link_to 在我的应用程序上更改路线后工作时遇到问题。这可能是一个简单的问题,但老实说,我看不到仅 linking 到 link_to 与对象名称将无法像以前在路由更改之前那样工作。
背景:我正在使用 friendly_id gem(不确定在手动更改 url 后我是否仍然需要它)。 我也在其中使用 Ancestory gem。
在前置应用程序上。我有一个仅用于索引和显示的列表资源。请参阅以下路线以及以前的工作路线。
# Front facing resources
scope "/:category_name/:category_id" do
resources :listings, only: [:show], path: '/:title'
end
resources :listings, only: [:index]
之前(工作正常)
# Front facing resources
resources :listings, only: [:index, :show]
resources :auctions, only: [:index, :show]
我已经成功地让我的 url 显示了以下结果:
listing GET /:category_name/:category_id/:title/:id(.:format) listings#show
结果:
http://localhost:3000/listings/helicopter/test-one/4
暂时先这样。我还在想结局 url。因此,我可以创建列表并在浏览器中手动输入 url 来查看它。
当我查看列表的索引页面并且我有 link_to
时出现错误当前代码:
<%= link_to listing.title, listing %>
错误:
No route matches {:action=>"show", :controller=>"listings"}, missing required keys: [:category_id, :category_name, :id, :title]
如何将这些必需的键添加到 link_to 助手?我尝试了很多方法,但并不遥远。我假设只改变 show 路由不会对任何以前的控制器方法造成太多干扰,并且列表仍然可以通过 id 找到。
任何方向都很好。太感谢了。
*** 更新 ****
好的,所以在发送上面的内容之前,我仔细查看并让它工作,但是我想问有没有更简洁的方法来做到这一点?只是看起来不太像"The Rails way"。我的最终目标是拥有一个长的 SEO 友好 link,其中包含类别和可能的子类别。
工作代码:
<%= link_to listing.title, listing_path(category_name: "listings", category_id: listing.category.name, title: listing.title.parameterize, id: listing.id) %>
结果:
http://localhost:3000/listings/Aircraft/twin-piston-jet/1
有什么想法吗???
你可以为此使用助手https://api.rubyonrails.org/classes/ActionController/Helpers.html
app/helpers/listing_helper.rb
module ListingHelper
def listing_route(listing, category_name = "Listings")
listing_path(category_name: listing, category_name: listing.category.name, title: listing.title.parameterize, id: listing.id)
end
end
关于您的看法
<%= link_to listing.title, listing_route(listing) %>