Ruby on rails 多模型编辑功能的令牌访问

Ruby on rails 多模型编辑功能的令牌访问,ruby-on-rails,ruby-on-rails-4,token,Ruby On Rails,Ruby On Rails 4,Token,我正在开发一个应用程序,在该应用程序中,客户将获得一个简短的Base64令牌,他们可以依次使用该令牌通过应用程序主页上的一个“搜索表单”访问几个不同型号之一的编辑功能 我已经创建了令牌功能,并将其包含在我需要的模型的模式中。我的问题是,如何最好地使用主页上的访问令牌搜索和访问编辑功能 我很难找到一个好的方法来实现这一点,虽然我找到了很多关于访问令牌的信息,但其中大部分似乎与我的用例无关。Rails提供了从父模型类继承模型类的能力。然后,模型可以具有共享属性,但也可以具有唯一属性。在数据库中,所有

我正在开发一个应用程序,在该应用程序中,客户将获得一个简短的Base64令牌,他们可以依次使用该令牌通过应用程序主页上的一个“搜索表单”访问几个不同型号之一的编辑功能

我已经创建了令牌功能,并将其包含在我需要的模型的模式中。我的问题是,如何最好地使用主页上的访问令牌搜索和访问编辑功能


我很难找到一个好的方法来实现这一点,虽然我找到了很多关于访问令牌的信息,但其中大部分似乎与我的用例无关。

Rails提供了从父模型类继承模型类的能力。然后,模型可以具有共享属性,但也可以具有唯一属性。在数据库中,所有这些模型对象都存储在所有类的同一个表中,因此这称为单表继承或STI。(有文档记录,但在博客帖子中有更好的文档。)

如果使用这种方法,则可以在父类中搜索所有实例以查找匹配的对象/记录

class AccessToken < ActiveRecord::Base
  # has attribute access_token, and maybe others
end

class OneAccessibleKind < AccessToken
  # may have other attributes
end

class AnotherAccessibleKind < AccessToken
  # may have other attributes
end
然后可以查询父类。注

all_models = AccessToken.where(access_token: 'a-token')
请注意,这些都将作为
AccessToken
对象(即父类)返回,但您可以检查
type
属性以查看它们的基类是什么

但是,如果您的类主要是不同的字段,因为您将有许多未使用的列,那么这可能不是最佳解决方案。这可能是一个性能问题,具体取决于您的后台数据库(假设为面向行的SQL)和对象数

另一种选择是使用一对一关系,并为每个其他模型使用
AccessToken
模型。在这里,您可以使用STI协会

class AccessToken < ActiveRecord::Base
  belongs_to :owner, :polymorphic => true
end

class OneAccessibleKind < ActiveRecord::Base
  has_one :access_token, :as => :owner
end

class AnotherAccessibleKind < ActiveRecord::Base
  has_one :access_token, :as => :owner
end
然后您可以找到一个访问令牌并访问每个
所有者
,以获取对象

AccessToken.where(access_token: 'a-token').map(&:owner)

我很难理解你想要完成什么。你能提供一些示例代码来说明这一点吗?很难用我目前为任务编写的代码级别来说明。。。基本上,我希望实现的是:我有几个模型,它们的表中有不同的列,除了
access\u-token
之外,大多数模型都不同。我希望找到一种方法,通过它我可以通过“access_token”搜索所有模型,并打开该记录的编辑路径。(示例:@beds.access_token)为了更好地解释-是否有一个不需要知道模型的选项来
Model.find(options)
-只需要选项?(在本例中,
something.find(访问令牌=>%search-input%)
例如)
create_table :access_token do |t|
  t.string :access_token
  t.integer :owner_id, null: false
  t.string :owner_type, null: false

  t.timestamps
end

create_table :one_accessible_kind do |t|
  # any attributes for this type

  t.timestamps
end
AccessToken.where(access_token: 'a-token').map(&:owner)