2016-02-29 41 views
3

我希望用戶能夠通過與默認URL /merchants/:id/edit(.:format)不同的方式編輯模型,該模式將使用令牌。該令牌隨機創建並存儲在數據庫中。編輯模型 - 令牌URL

我想創建的鏈接與此類似merchants/token-124512/edit

現在我希望能夠通過電子郵件發送此鏈接給用戶。帶有ID的默認鏈接是link_to "link", edit_merchant_path(@merchant, :only_path => false)

帶標記的人會怎麼樣?另外,我怎麼能在routes.rb中聲明這個呢?

回答

6

解決方案

首先我會建議使用_url,而不是_path在你的郵件,因爲你要解決完整路徑。

嘗試:

link_to "link", edit_merchant_url(id: @merchant.token)

爲什麼_url?

使用_path將讓你<a href=merchants/token-124512/edit'>link</a>,但在郵件你想知道的主機,所以你應該得到這樣的: <a href='hostname.com/merchants/token-124512/edit'>link</a>

4

如果使用的是軌道4,你可以使用'param'所謂的新概念在你的路線,這將改變默認路線。

您可以傳遞任何字段而不是您的ID。

# config/routes.rb 

resources :merchants, param: :token_field 

# app/controllers/merchants_controller.rb 

@merchant = Merchant.find_by(token_field: params[:token_field]) 

resources :merchants, param: :your_fleld 
 

 

 
    merchants GET /merchants(.:format)     merchants#index 
 
      POST /merchants(.:format)     merchants#create 
 
new_merchants GET /merchants/new(.:format)    merchants#new 
 
edit_merchants GET /merchants/:your_field/edit(.:format) merchants#edit 
 

 

 
Merchant.find_by(your_field: params[:your_field])

You can find the documentation here

+0

海,試試這個並辦理文檔。我詳細說明了答案,並且還顯示了生成的路線。請檢查。 :-) – Sravan