Rails 中类似 Drupal 的路由系统

发布于 2024-11-04 09:15:45 字数 377 浏览 4 评论 0原文

我正在尝试找到一种最佳实践,允许用户在 Rails 中定义页面的路由,方法是在提交帖子时将其写入文本字段,就像 Drupal 中的 Path 模块一样(是的,我们正在将 Drupal 站点移植到 Rails)

因此,我需要

  • 在文章提交时定义一个新的命名路由(例如 http://www.domain.com/a-day-in-annas-life)
  • 通过执行 301 重定向来更改文章编辑时的现有路由(如果他们定义了新路由)从旧路线到新路线

我怎样才能最好地实现这一目标?

I am trying to find a best-practice to allow users to define the route to their pages in Rails, by writing them in a text field when submitting posts, like with the Path module in Drupal (yes, we are porting a Drupal site to Rails)

So, I need to

  • define a new, named route on article submission (eg http://www.domain.com/a-day-in-annas-life)
  • change the existing route on article edit, if they define a new one, by doing a 301 redirect from the old route to the new one

How can I best achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光病人 2024-11-11 09:15:45

好吧,我找到了一种方法,但它是否是最佳实践,我不能说。

我正在使用这样的自定义限制器:

  class CharitiesRestrictor
    def self.matches?(request)
      slug = request.path_parameters[:path]
      !Charity.find_by_name(slug).nil?
    end
  end

  constraints CharitiesRestrictor do
    match  '*path' => 'charities#show_by_slug', :constraints => CharitiesRestrictor.new
  end

当我为每个应该能够响应永久链接的模型/控制器对创建这样的块时,我可以让它们都有机会对永久链接进行操作。然而,这也意味着它们都会被串联调用,这并不一定是理想的。

Okay, I found a way, but if it's best practice or not, I cant say.

I am using custom restrictor's like this:

  class CharitiesRestrictor
    def self.matches?(request)
      slug = request.path_parameters[:path]
      !Charity.find_by_name(slug).nil?
    end
  end

  constraints CharitiesRestrictor do
    match  '*path' => 'charities#show_by_slug', :constraints => CharitiesRestrictor.new
  end

When I create a block like this for each of my model/controller pairs that should be able to respond to permalinks, I can have them all have a chance to act on a permalink. However, this also means that they all get called in series, which is not necessarily ideal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文