【问题标题】:Route to an object by id of related object通过相关对象的 id 路由到对象
【发布时间】:2012-01-25 23:39:23
【问题描述】:

大家好,

我目前完全被以下问题所困扰,甚至不知道如何继续,所以我的 Rails 3(.1)-app 的任何帮助将不胜感激:

我有一个“document_type”,它可以“有许多”(版本的)“文档”,可以通过一个短 URL 访问,该 URL 类似于domain.com/d<id of form> - 就像 ID 为 12 的文档的domain.com/d12。到目前为止没有什么特别的。但是现在我被要求更改(或更准确地说是添加)允许通过 document_type 的 id 和文档的 id 访问的路由:domain.com/t2v3(或类似的东西),其中“2”是 document_type_id,“3”是文档的版本(在文档表中都是 o/c)。

我所拥有的代码(以防万一......)是:

match 'd:id', :controller => 'documents', :action => 'show', :id => 'id'

我只是不知道如何(或者即使...)可以做到这一点...

天啊!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 routes


    【解决方案1】:

    如果网址格式灵活,我会更改它:domain.com/t2/v3

    那么您的路线将如下所示:

    get 't:type_id/v:version_id', :to => 'documents#show_version'
    

    【讨论】:

    • 遗憾的是它不是(至少不应使用额外的“/”):-/
    • ...我会接受这个解决方案,因为这就是我最终这样做的方式——尽管它并不完全是我想要的。
    【解决方案2】:

    t另一种方法可能是让您的路线尽可能简单:

    get ':id', :controller => 'documents', :action => 'show'
    

    然后您可以使用friendly_id 将默认整数标识符替换为“友好”的标识符。

    class Document < ActiveRecord::Base
      extend FriendlyId
    
      friendly_id :doc_id, :use => :slugged
    
      def doc_id
        "t#{id}v#{version}"
      end
    end
    

    更多关于这个有用的宝石在这里:http://rubydoc.info/github/norman/friendly_id/master/file/Guide.rdoc

    【讨论】:

    • 有趣-我会试一试(...很快...优先级已降低;-))。谢谢!
    猜你喜欢
    • 2017-08-17
    • 1970-01-01
    • 2011-10-23
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多