gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中实现 "short"嵌套的虚荣网址?

转载 作者:行者123 更新时间:2023-12-04 14:36:05 27 4
gpt4 key购买 nike

我了解如何在 Rails 中创建虚 URL 以进行翻译http://mysite.com/forum/1进入 http://mysite.com/some-forum-name
但我想更进一步,让以下工作(如果可能的话):

代替:http://mysite.com/forum/1/board/99/thread/321
我想在第一步得到这样的东西:http://mysite.com/1/99/321
并最终拥有它,如 http://mysite.com/some-forum-name/some-board-name/this-is-the-thread-subject .

这可能吗?

最佳答案

要使用 Rails URL 助手“很好地”完成这项工作,您必须覆盖 to_param在您的模型中:

def to_param
permalink
end

哪里 permalink可能是由 before_save 生成的
before_save :set_permalink

def set_permalink
self.permalink = title.parameterize
end

创建永久链接的原因是,最终,可能,您将拥有一个对 URL 不友好的标题。那就是 parameterize进来。

现在,至于根据什么来查找这些帖子 permalink你可以走简单的路线或艰难的路线。

简易路线

定义 to_param略有不同:
def to_param
id.to_s + permalink
end

继续使用 Forum.find(params[:id])哪里 params[:id]将是诸如 1-my-awesome-forum 之类的东西.为什么这仍然有效?那么,Rails 会调用 to_i关于传递给 find 的参数,并调用 to_i在该字符串上将简单地返回 1 .

硬路线

离开 to_param相同。诉诸使用 find_by_permalink在您的 Controller 中,使用 params[:id]它以路线的形式传递:
Model.find_by_permalink(params[:id])

现在是有趣的部分

现在您想从 URL 中取出资源。嗯,这是一种西西弗式的方法。当然,您可以停止使用 Ruby on Rails 提供的路由助手,例如 map.resources并使用 map.connect 定义它们但它真的值得那么多 yield 吗?它赋予你什么“特殊超能力”?没有,恐怕。

但是如果你想这样做,这里是一个很好的起点:
get ':forum_id/:board_id/:topic_id', :to => "topics#show", :as => "forum_board_topic"

关于ruby-on-rails - 如何在 Rails 中实现 "short"嵌套的虚荣网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2575475/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com