【问题标题】:Rails routes parameters for both :id and :tokenRails 为 :id 和 :token 路由参数
【发布时间】:2016-08-25 02:51:46
【问题描述】:

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

有很多关于如何更改默认路由参数的资源:

resources :events, params: :token

def to_param
  token
end

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

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

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

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby routes


    【解决方案1】:

    假设url是相同的形状-

    # routes.rb
    resources :events
    
    # your urls
    /events/15
    /events/some-token-string
    

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

    # 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
    

    【讨论】:

    • 正是我想要的,而且执行起来更简单。谢谢。
    【解决方案2】:

    想不出任何内置机制,但您可以使用friendly_id gem 来实现。

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多