我想通过短信或电子邮件向客户发送评分链接。例如,我计划使用given code。此操作只能运行一次,并且该页面应该无需登录即可打开。请对此进行一些说明。
谢谢。
您将需要一个令牌才能在链接中使用...随着迁移,向订单项(或您称其为订单行的任何字段)添加字段'token']
rails g migration add_token_to_order_item token:token
迁移将生成字段并创建索引以通过令牌快速检索记录。还要在表中添加has_secure_token
。
class OrderItem < ApplicationRecord
has_secure_token
...
end
为要包含在SMS或电子邮件中的链接创建路由,请在routes.rb中执行此操作
get 'enter_review/:token', to: 'reviews#enter_review'
然后您将在电子邮件或SMS中收到...
<%= link_to nil, enter_review_reviews_url(@order_item.token) %>
[nil
将导致链接本身被显示,因此,如果它们具有限制性电子邮件客户端,则可以添加一些文本,例如“如果您无法单击该链接,则将其复制并粘贴到您的浏览器中”。] >
[通过修改ApplicationController确保该操作不需要登录
class ApplicationController < ActionController::Base before_action :authenticate_user!, unless: -> { customer_rating? } private def customer_rating? params[:controller] == 'reviews' && params[:action] == 'enter_review' end end
并且在您的控制器
ReviewsController
中,您将看到类似...
class ReviewsController def enter_review @order_item = OrderItem.find_by(token: params[:token]) unless @order_item # redirect to a "sorry, cannot find this order..." page and then return end ... end end
[请注意,他们输入评论后,他们可能会单击一些
Submit
按钮来发布操作...您需要该操作的路线,您需要在控制器中定义的操作,然后'将需要扩展customer_rating?
以确保发布操作不需要用户登录。
在发布操作结束时,请执行...
@order_item.regenerate_token
...将重新生成令牌,因此评级链接仅是一次。
向客户模型添加两个字段: