2016-04-29 42 views
1

是否有可能爲id和token設置路由參數?Rails路由參數:id和:令牌

有充足的資源,在那裏如何更改默認路由PARAMS:

resources :events, params: :token 

def to_param 
    token 
end 

但是我似乎無法找到相關的「非此即彼」的情況,將允許其他人訪問活動#顯示任何東西通過event_id或event_token。在我的頭,下面是有道理的:

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

背景故事: 我設立一個「分享鏈接」,讓用戶無需賬號可以查看活動頁面,類似Google文檔。爲此,將爲每個事件生成一個唯一標記,從而創建網頁安全網址(Protected sharing link in Ruby on Rails)。我面臨的問題是嘗試使用event_id和event_token來維護路由,因爲活動頁面也被賬戶持有者查看,在id中查找事件要容易得多。

謝謝。

回答

3

假設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 
+0

正是我一直在尋找,甚至在執行簡單。謝謝。 – ncarroll

0

想不到任何內置機制,但你可以使用friendly_id寶石來實現這一點。