如何在不登录的情况下获得评分?

问题描述 投票:0回答:2

我想通过短信或电子邮件向客户发送评分链接。例如,我计划使用given code。此操作只能运行一次,并且该页面应该无需登录即可打开。请对此进行一些说明。

谢谢。

ruby-on-rails rating
2个回答
1
投票

您将需要一个令牌才能在链接中使用...随着迁移,向订单项(或您称其为订单行的任何字段)添加字段'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

...将重新生成令牌,因此评级链接仅是一次。


0
投票

向客户模型添加两个字段:

© www.soinside.com 2019 - 2024. All rights reserved.