【问题标题】:routes.rb, how set a different primary key for the paths?routes.rb,如何为路径设置不同的主键?
【发布时间】:2011-07-26 20:57:01
【问题描述】:

假设像 Thread (id, uuid) 这样的模型,uuid 是唯一生成的标识符。我想更改默认路由:

edit_thread GET    /threads/:id/edit(.:format)                        {:action=>"edit", :controller=>"threads"}
thread GET    /threads/:id(.:format)                             {:action=>"show", :controller=>"threads"}
PUT    /threads/:id(.:format)                             {:action=>"update", :controller=>"threads"}

不使用 :id 而是使用用户 :uuid --- 这在 Rails/routes.rb 中是如何实现的?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    如果我理解正确,您想确保 Rails 在路由中使用 :uuid 字段而不是 :id 字段。

    这很容易实现,在您的模型中否决to_param 方法:

    def Thread
      def to_param
        uuid
      end
    end
    

    在您的控制器内部,您必须编写如下内容:

    thread = Thread.find_by_uuid(params[:id])
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      :id 可以随意更改。您的 params 哈希将由您在路由中选择的名称填充,因此如果您将其更改为 :uuid 您只需要相应地更改您的控制器 (o = Model.find_by_uuid(params[:uuid]))

      【讨论】:

      • 谢谢,但我不明白如何在我的路线中更改它?我需要做一堆比赛吗?我在想 rails 会有一个更优雅的设置... thxs
      • @AnApprentice:抱歉,我没有意识到您的意思是要更改资源路由中的 :id 参数。我认为这是不可能的(你在这里打破了rails约定)。之前有人问过类似的问题:(stackoverflow.com/questions/810385/…)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2017-07-10
      • 2022-11-11
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 2014-02-16
      相关资源
      最近更新 更多