【问题标题】:Rails routes creating additional info in URLRails 路由在 URL 中创建附加信息
【发布时间】:2010-05-13 14:25:24
【问题描述】:

假设我有一个名为“交付”的模型,并且我正在使用以下默认 URL 路由:

 # Install the default routes as the lowest priority.
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'

所以交付 URL 将是:

http://localhost:3000/deliver/123

我想要解决的是如何在 ID 旁边或代替 ID 使用数据库中的另一个字段。

例如。如果我在创建视图中有一个名为“deliveraddress”的字段,我该如何将它放入路由中?

所以我可以有一些链接:

http://localhost:3000/deliver/deliveraddress

谢谢,

丹尼

【问题讨论】:

  • /deliveraddress 会显示什么?我想您可能希望将送货地址与特定送货相关联,因此链接将是localhost:3000/deliver/123/deliveraddress 对吗?
  • 是的,老实说,这一切都是为了让投递链接无法猜测。
  • 换句话说,您将必须获得直接交付链接,否则您将无法猜测特定交付的正确 URL。

标签: ruby-on-rails url routes


【解决方案1】:

由于您的 cmets 听起来您正试图混淆 URL 中的 ID,因此我建议您查看几天前提出的这个问题。

Obfuscating ids in Rails app

【讨论】:

    【解决方案2】:

    首先,url“http://localhost:3000/deliver/123”匹配任一默认路由规则。但是,只有在你声明了一个“资源”之后,它才会生成这样一个 RESTful URL。

    在您的情况下,只需实现 Deliver 模型的“to_param”方法:

    class Deliver < ActiveRecord::Base
      def to_param
        return self.deliveraddress
      end
    end
    

    它会通过调用url_for方法生成你想要的url,比如link_to @deliver

    不要忘记确保您的数据库中有唯一的送货地址,这样您就永远不会发现有一个地址的重复记录。

    之后,你需要更新actions中的finder方法:

    def show
      @deliver = Deliver.find_by_deliver_address!(params[:id])
    end
    

    希望这个答案有用。

    【讨论】:

    • 也许更好的方法是让 to_param return "#{id}/#{deliveraddress}" 然后更新您的路线和查找器以使用它,这将允许在交付地址列中重复跨度>
    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多