【问题标题】:How can I disguise the ID part of my URL in rails when working without active record?在没有活动记录的情况下工作时,如何在 Rails 中伪装我的 URL 的 ID 部分?
【发布时间】:2014-10-14 13:12:15
【问题描述】:

我有一个如下所示的网址:

http://localhost:3000/activities/5NcsdzWvXbv

我想让它看起来像这样:

http://localhost:3000/activities/river-rafting

我的非活动记录数据库中有一个列,其中存储了我想使用的活动名称,而不是 ID。

我查看了friendly_ID gem,但由于我的模型设置方式,它看起来对我不起作用。

class Leads
    include ActiveAttr::Model
end

有没有简单的解决方案?

我查看了一个建议这样做的旧 Rails 问题:

def to_param
  self.name
end

这对我不起作用,因为我的模型文件没有连接到 activerecord,而是连接到外部 nosql 数据库。

我可以对我的路由文件进行一些修改,还是有其他方法可以修改我的 URL?

感谢您的宝贵时间。

【问题讨论】:

    标签: ruby-on-rails ruby rubygems activemodel


    【解决方案1】:

    我不太明白你的问题。

    如果您的routes.rb 设置正确,那么它将转换为activities/:id。所以,如果你在控制器中准备数据,那么你将如何获取数据,将params[:id] 传递给你的非活动记录 ORM 取决于你。

    :id 只是一个占位符。如果您将路由定义为activities/:slug,那么您将使用params[:slug] 访问id 部分

    能否请您发布不适合您的代码部分?

    编辑:

    您还没有发布任何不适合您的代码。无论如何,我觉得您需要查看一些有关在 Rails 中使用多个数据库的文档。这是初学者的草图:

    Class YourClass 
     establish_connection "your_external_database"
    end
    

    然后您使用该连接执行对数据库的查询,使用您的 slug。

    编辑2:

    啊……您需要混淆 id。它只是归结为公开编码的 id,然后在您的(后端)端解码它们 :)

    这是一个示例方法: How do I obfuscate the ids of my records in rails?

    【讨论】:

    • 不是说不行。我不明白如何设置我的应用,所以我使用外部数据库的名称列而不是 ID。
    • 您好,数据库将保持不变。将使用 ID 搜索活动。我需要的只是伪装身份。有一种方法可以做到这一点,就像我过去做过的那样,但不记得具体是如何做到的。
    • 这与我想做的类似。例如,我有一个 objectId:G5ryF5dg,而该对象有一个 activityType:Swimming。我需要 objectId 来找到正确的对象,这就是它在 url 中传递的原因。但是,我更希望 url 显示活动类型,但仍按我的 objectId 搜索。这可能吗?所以像我目前正在做的那样使用 objectId 进行搜索,但在 URL 中显示 activityType 值而不是 objectId
    • 只要可以通过activityType识别对象(即对象范围内的每个对象的activity类型都是唯一的)就可以了。
    • 这是我的问题。活动类型不是唯一的。它不能用于查找对象。是否可以修改代码以在 ID 之后将 activityType 名称作为 url 的一部分包含在内?也许混淆 Id 然后在其后添加活动类型?
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多