我有一個「反饋」模型,用戶應該能夠針對他/她的工作性能請求反饋。我已經編寫了基本的行動來創建一個新的反饋請求,以及將請求發送給提供者(將回應反饋的人)的郵件程序。使用Rails 4中的令牌生成一個唯一的URL,以獲得外部表單響應
我會從社區想諮詢關於執行以下操作:
- 一旦創建了新的反饋請求,發送電子郵件應該包含一個鏈接到一個形式,其中提供者可以輸入他對用戶性能的反饋。
- 反饋提供者不應被要求以任何方式登錄或註冊(即完全在應用程序外部)。
- 提交後,應該在 系統中捕獲提供者的反饋。
現在,我有以下的思路去實現它,但我不知道這是否是繼續進行的最佳方式:
- 生成於創建一個新的反饋請求的唯一標記。像這樣:Best way to create unique token in Rails?。
- 然後應該將令牌輸入到「反饋」表中。然後
- 梅勒應該產生變量(例如@url),其生成鏈接到另一個控制器(讓我們說「external_feedback」和行動不需要登錄(例如沒有的before_filter:!的authenticate_user從設計)
- 該網址應包含的參數與令牌的特定反饋請求。
- 動作要更新「反饋」請求,並用simple_form產生的形式。
整個事情是類似於響應一個問卷或調查(如Survey Monkey)
經過一番研究,我相信這裏的Friendly ID寶石可能會很有用。我也在閱讀http://guides.rubyonrails.org/form_helpers.html的第8部分,也許我需要在正式意義上實現authenticity_token。我真正想要的是:
- 上述方法是否正確地執行此操作?
- 如果是這樣,關於如何實現它的任何細節(帶或不帶友好ID)?
- 你是否知道存在用於生成此類URL /令牌的任何寶石?
在此先感謝您。我現在包括模型和控制器的細節目前的狀態:
feedback.rb
# == Schema Information
#
# Table name: feedbacks
#
# id :integer not null, primary key
# user_id :integer
# p_first_name :string(255)
# p_last_name :string(255)
# p_email :string(255)
# goal_id :integer
# u_comment :text
# p_comment :text
# created_at :datetime
# updated_at :datetime
#
class Feedback < ActiveRecord::Base
belongs_to :user
belongs_to :goal
has_many :feedback_attributes
validates_presence_of :p_first_name, :p_last_name, :p_email, :goal_id
end
這是我的郵件:
class FeedbackMailer < ActionMailer::Base
def feedback_request(user, feedback)
@user = user
@feedback = feedback
@url = 'http://thisistheexampleurlforfeedback'
mail(to: @feedback.p_email, subject: "#{@user.first_name} #{@user.last_name} has requested your feedback", from: @user.email)
end
end
非常感謝,感謝David。爲我完美工作。 – turkeyman84
這個令牌生成邏輯將維護唯一的令牌,如主鍵?或者它重複了令牌?例如:說它隨機生成一個標記「123」,那麼它是否有機會再次隨機生成「123」? – John
@John取決於你的網站獲得多少流量,這個令牌生成邏輯可以生成一個重複的令牌,一次可以達到四十億次。在令牌上放置一個唯一的索引並開始做起來會更安全。 self.token = SecureRandom.hex [0,10] .upcase;救援ActiveRecord :: RecordNotUnique;重試; end' –