我有一个'反馈'模型,用户应该能够请求他/她的工作表现反馈。我已经编写了用于创建新反馈请求的基本操作,以及用于将请求发送给提供商的邮件程序(将通过反馈回复的人)。
我希望社群提供以下建议:
现在,我有以下想法来实现它,但我不确定这是否是最好的方法:
整个事情类似于回答调查问卷或调查(如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
答案 0 :(得分:13)
使用索引将令牌字段添加到反馈模型,并添加回调以在创建时填充它 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年代!