修改模型 - 令牌网址

时间:2016-02-29 11:32:19

标签: ruby-on-rails routes

我希望用户能够通过不同于默认网址/merchants/:id/edit(.:format)编辑模型,该网址将使用令牌。该令牌随机创建并存储在数据库中。

我想要创建的链接与此merchants/token-124512/edit类似。

现在我希望能够通过电子邮件将此链接发送给用户。 ID为link_to "link", edit_merchant_path(@merchant, :only_path => false)的默认链接。

带有令牌的那个人怎么样?另外,我如何在routes.rb中声明这个?

2 个答案:

答案 0 :(得分: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>

答案 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])

示例

&#13;
&#13;
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;
&#13;
&#13;

You can find the documentation here