【问题标题】:Redirect parameterized URL重定向参数化 URL
【发布时间】:2017-01-29 10:00:35
【问题描述】:

我在 URL 中有记录的 ID 和名称。

def to_param
    "#{id} #{name}".parameterize
end

但是任何名称都可以在 URL 中使用。我可以执行以下操作,并且有效

www.site.com/records/ID-anything-here-works

如何将ID-anything 重定向到ID-name

这是一个例子。

假设我有一个“产品”模型和一个名称为“shoe”且 ID 为“6”的记录。

网址是这样的

products/6-shoe

但是这个网址也可以使用

products/6-eiufwojfeowjfowef

如何使第二个 URL 重定向到第一个?

我正在处理表演动作:

def show
    @website = Website.find(params[:id])
end

【问题讨论】:

  • 我不明白你的问题。你能改写一下吗?
  • 好的,我想我明白你的意思:你希望他们只输入数据库中当前可用的名称?
  • 记录名称和记录ID在数据库中。我希望 ID 和名称出现在 URL 中,并且我目前正在使用它。但是记录似乎只能通过 ID 检索,我可以在 URL 中输入任何我想要的名称并显示记录。我希望它重定向到 ID-name。
  • 您是否在模型中使用 to_param 覆盖?
  • 我不知道你所说的“覆盖”是什么意思——也许我有,也许我没有,我不确定。但在问题中,我展示了我的模型中的 def_param sn-p。

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

试试这个:

  def show
    @website = Website.find(params[:id])
    unless params[:id] == @website.to_param
      redirect_to @website, status: 301
    end
  end

它会像现在一样找到实例(忽略名称),但随后会将用户重定向到具有当前名称的正确路径。

注意重定向中的 301 状态,这有利于 SEO,每个网站只有一个实际 URL。

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 2011-12-16
    • 1970-01-01
    • 2019-02-27
    • 2015-06-16
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多