1

我正在为最后几分钟的假期建立一个网站。

现在我正忙于建立 seo 友好的 url。每最后一分钟都有一个国家和一个城市。我想让网址看起来像这样的方式如下:

对于每个国家/地区所有最后几分钟的页面:
“domain.com/last-minutes-spain”<br />
对于每个城市所有最后几分钟的页面:
“域.com/last-minutes-spain/barcelona “<br />
每个国家/地区所有最后几分钟的页面 url 工作正常,但每个城市页面的 url 不正常。

我的路线(我正在使用friendly_id gem):

match '/last-minutes-:id' => 'countries#show', :as => 'show_country'
match "/last-minutes-:country_id/:id" => 'city#show', :as => 'show_city'

国家控制器.rb:

def show
  @country = Country.find(params[:id])
end

国家/地区/show.html.erb:

<% @country.cities.each do |c| -%>
  <%= link_to(c.title, show_city_path(c.slug)) %><br />
<% end -%>

c.slug 用于friendly_id gem

显示城市路径(每个城市的最后几分钟)显示如下:
“domain.com/last-minutes-barcelona/spain”<br />

所以这个城市和国家都在错误的地方。有谁知道如何正确处理?

4

1 回答 1

0

你真正想做的是看看在你的模型中覆盖 to_param。

每当有任何调用尝试构建涉及模型的路径时,都会在模型实例上调用 to_param 方法以确定如何在 URL 中引用它。换句话说,您的路线中对应于 :id 的部分。如果您简单地覆盖此方法,则可以返回任何您想要的东西。最简单的方法是将整数 ID 保留为第一个值。像这样的东西:

def to_param
  return "#{self.id}-#{self.text_for_seo}"
end

而已。事实上,我昨天就为此录制了一个演练。很快,第一件事就是您正在尝试的内容。然后继续解释如何扩展它以支持加密的数据库 ID: http ://www.youtube.com/watch?v=UW_s9ejrCsI

于 2014-01-28T20:27:36.223 回答