我問的問題幾乎與這里問的相同:URL 中的加密 ID
只是我不一定需要加密的ID,我使用隨機字串代碼。我已經嘗試了一個類似的解決方案來解決Jo?o Carlos Ottobboni然后用 FriendlyId 回答的問題,如下所示:
在我的模型/優惠券.rb
class Coupon < ApplicationRecord
extend FriendlyId
friendly_id :code #code is already a coupon column
validates :code, uniqueness: true
before_create :generate_code
def generate_code
all_letters = [('A'..'Z'), ('0'..'9')].map(&:to_a).flatten
random_string = (0...6).map { all_letters [rand(36)] }.join
self.code = random_string
end
在我的控制器/coupon_controller.rb
class CouponsController < ApplicationController
before_action :set_coupon, only: [:show, :edit, :update, :redeem, :destroy]
...
private
def set_coupon
@coupon = Coupon.friendly.find(params[:id])
end
當我被重定向到它實際作業的特定優惠券路徑時,將我重定向到coupons/SJKE3K而不是coupons/13. 但這并不能阻止我在 url 中輸入 13 并且它也會重定向我。我怎樣才能避免這種情況?我需要只能通過代碼而不是 ID 訪問優惠券。
uj5u.com熱心網友回復:
Coupon.friendly.find(params[:id])允許使用 code 和 id 來查找記錄。如果切換到Coupon.find_by!(code: params[:id])只有代碼就能找到優惠券。
在這種情況下,您根本不需要友好 ID,您可以繼續手動生成代碼并使用它查找記錄。
在生成使用優惠券或包含優惠券的路線的表單時,這將需要更多的作業,因為默認情況下這些將始終使用整數 ID - 您必須明確地將id: coupon.code引數作為引數傳遞給 url/path 幫助程式并傳遞url: my_path(id: coupon.code)或類似創建表單時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/411555.html
標籤:
上一篇:跨多個連接“不存在”
