我希望用户能够通过不同于默认网址/merchants/:id/edit(.:format)
编辑模型,该网址将使用令牌。该令牌随机创建并存储在数据库中。
我想要创建的链接与此merchants/token-124512/edit
类似。
现在我希望能够通过电子邮件将此链接发送给用户。 ID为link_to "link", edit_merchant_path(@merchant, :only_path => false)
的默认链接。
带有令牌的那个人怎么样?另外,我如何在routes.rb中声明这个?
答案 0 :(得分:6)
首先,我建议您在邮件中使用_url
代替_path
,因为您想要解析完整路径。
尝试:
link_to "link", edit_merchant_url(id: @merchant.token)
使用_path
会得到<a href=merchants/token-124512/edit'>link</a>
,但是在邮件中你也想知道主持人,所以你应该得到这个:
<a href='hostname.com/merchants/token-124512/edit'>link</a>
答案 1 :(得分:4)
如果您使用的是rails 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])
&#13;