ruby-on-rails-4 – 在Rails 4中使用令牌生成一个唯一的URL,用于
我有一个“反馈”模型,用户应该可以请求他/她的工作表现反馈.我已经编写了用于创建新反馈请求的基本操作,以及用于将请求发送给提供者的邮件程序(将通过反馈回复的人).
我希望社区提供有关实施以下内容的建议: >创建新的反馈请求后,发送的电子邮件应包含指向表单的链接,供应商可以在其中输入有关用户性能的反馈. 现在,我有以下想法来实现它,但我不确定这是否是最好的方法: >在创建新的反馈请求时生成唯一令牌.像这样:Best way to create unique token in Rails?. 整个事情类似于回答调查问卷或调查(如Survey Monkey). 经过一些研究后,我相信Friendly ID gem在这里很有用.我也在阅读http://guides.rubyonrails.org/form_helpers.html的第8节,也许我需要在正式意义上实现authenticity_token.我真正想要的是: >上述方法是否通常是正确的方法? 先感谢您.我现在包括模型和控制器详细信息的当前状态: 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 解决方法
使用索引将令牌字段添加到反馈模型,并添加回调以在创建时填充它.
feedback.rb before_create :add_token private def add_token begin self.token = SecureRandom.hex[0,10].upcase end while self.class.exists?(token: token) end 现在为供应商反馈添加新路线 resources :feedbacks do get 'provider' put 'provider_update' # you might not need this one,if you are happy to use update end 在您的控制器中确保它们不会被设计拒绝 before_filter :authenticate_user!,except: [:provider,:provider_update] ... def provider @feedback = Feedback.find_by token: params[:token] end 然后在app / views / feedback / provider.html.haml中,您可以使用simple_form中的url将其发送到正确的更新位置,并仅提供他们应该看到的输入. f.inputs :p_comment 现在更新您的邮件. @url = provider_feedback_url(@feedback,token: @feedback.token) 您可以使用友好ID执行与此类似的操作,但您仍需要创建某种独特的slug然后使用Feedback.friendly.find.我想你会想把它与一个令牌结合起来,以确保它仍然是提供反馈的提供者 – 所以唯一的好处就是隐藏真正的id / count.我认为你应该将p_ *字段更新为provider_ *,以便下一个开发人员知道它里面有什么 – 它不是90年代! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |