ruby-on-rails - :id and :token 的 Rails 路由参数

标签 ruby-on-rails ruby routes

是否可以为 :id 和 :token 设置路由参数?

关于如何更改默认路由参数的资源非常丰富:

resources :events, params: :token

def to_param
  token
end

但是,我似乎找不到任何与允许某人通过 event_id 或 event_token 访问 Events#show 的“非此即彼”场景相关的内容。在我看来,以下是有道理的:

resources :events, params: :token || :id

背景故事: 我正在设置一个“共享链接”,以便没有帐户的用户可以查看事件页面,类似于 google 文档。为此,为每个事件生成一个唯一的 token ,创建一个网络安全 url ( Protected sharing link in Ruby on Rails )。我面临的问题是尝试同时使用 event_id 和 event_token 来维护路由,因为帐户持有人也正在查看事件页面,其中通过 ID 查找事件要容易得多。

谢谢。

最佳答案

假设url是相同的形状-

# routes.rb
resources :events

# your urls
/events/15
/events/some-token-string

Rails 会将最后一个斜杠后的所有内容都视为 id 参数。从那里您可以使用 子句进行查询

# Rails 5 with no raw SQL
Event.where(id: params[:id]).or(Event.where(token: params[:id])).first

# Rails 4 and lower (also works with Rails 5)
Event.where("id = ? or token = ?", params[:id], params[:id]).first

关于ruby-on-rails - :id and :token 的 Rails 路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36946882/

相关文章:

ruby - 在 irb 中访问加载源中的变量

c# - ASP .NET WebAPI 路由数据模式

javascript - 如何使用路由器/路由器参数在 react 中将数据从一个父组件传输到另一个父组件

ruby-on-rails - 如何检查变量是否有错误

ruby-on-rails - Rails 应用程序无法连接到 PostgreSQL

ruby-on-rails - 抽成 Assets :precompile takes 28 minutes on 1. 9.2

ruby - 在 Redis 中将数组设置为哈希值

ruby-on-rails - Ruby Active Record join and includes 为 count 生成不同的 sql

routes - sveltekit 基于哈希的路由

ruby-on-rails - 将文件传递给后端 [rails] 上的回形针