簡體   English   中英

如何在模型中設置屬性?

[英]How do I set attributes in the Model?

我想從模型中自動生成一個哈希值。

用戶創建簡歷,然后他們可以通過單擊共享按鈕來選擇共享,共享按鈕會自動生成綁定到該特定簡歷視圖的唯一(隨機哈希字符串)URL。

class ResumesController < ApplicationController

  def share
    @resume = Resume.find(params[:id])

    @share = Share.new
    @share.resume_id = @resume.id 

    @share.save

    redirect_to action: 'index'
  end

end

我的Share模型有兩列, resume_id, which I already set in the controller, and resume_id和我想在模型中自動設置的hash_url`。

class Share < ActiveRecord::Base
  attr_accessible :label, :resume_id, :url

end

我的問題是,如何創建一個唯一的哈希並將其存儲在hash_url列中? 另外,我假設在保存之前,它必須檢查共享表以確保它沒有保存已經存在的哈希。

您可以在保存對象之前生成並存儲哈希。 在模型中添加以下內容:

# share.rb
before_validation :generate_hash

private
def generate_hash
  self.hash_url = Resume.find(resume_id).content.hash
end

hash方法是Ruby提供的一種方法: http : //ruby-doc.org/core-2.1.1/String.html#method-i-hash根據字符串的長度和內容返回哈希值

before_create

我猜您想將用戶吸引到以下位置:

domain.com/resumes/your_secret_hash_url #-> kind of like a uuid?

我這樣做的方法是對SecureRandom使用before_create回調。 盡管這不會給您帶來獨特的價值,但您可以對照以下表格進行檢查:

#app/models/resume.rb
Class Resume < ActiveRecord::Base
   before_create :set_hash

   private

   def set_hash
       self.hash_url = loop do
         random_token = SecureRandom.urlsafe_base64(nil, false)
         break random_token unless Resume.exists?(token: random_token)
       end
   end
end

參考: 在Rails中創建唯一令牌的最佳方法?

這會給你設置的能力hash_urlcreate ,並且有它是唯一的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM