是否可以为 :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/