Ich habe ein "Feedback" -Modell, mit dem ein Benutzer Feedback zu seiner/ihrer Arbeitsleistung anfordern kann. Ich habe grundlegende Aktionen geschrieben, um eine neue Rückmeldungsanfrage zu erstellen, und den Mailer, um die Anfrage an den Anbieter zu senden (Person, die mit Rückmeldung antwortet).Generieren einer eindeutigen URL mit Tokens in Rails 4 für eine externe Formularantwort
würde Ich mag Rat von der Gemeinschaft des an der Umsetzung folgenden:
- Sobald eine neue Feedback-Anfrage, erstellt die E-Mail, die einen Link zu einem Formular enthalten soll, wo der Anbieter eingeben kann seine gesendet wird Feedback zur Benutzerleistung.
- Der Feedback-Anbieter sollte nicht verpflichtet sein, sich in irgendeiner Weise anzumelden oder zu registrieren (d. H. Vollständig außerhalb der Anwendung).
- Nach der Übermittlung sollte das Feedback des Anbieters im System erfasst werden.
Jetzt habe ich folgende Ideen zu ihrer Umsetzung, aber ich bin nicht sicher, ob dies der beste Weg ist, um fortzufahren:
- Erzeugt eine eindeutige Token auf die Schaffung eines neuen Feedback-Anfrage . Etwas wie dieses: Best way to create unique token in Rails?.
- Das Token sollte dann in die "Feedback" -Tabelle eingegeben werden.
- Mailer sollte dann erzeugen Variable (zB @url), die Verbindung zu einem anderen Controller erzeugt (sagen wir mal 'external_feedback' und Aktion, die nicht log-in erforderlich ist (zB keine before_filter:. Authenticate_user von Devise)
- Diese URL enthalten sollte Anforderung einen Parameter mit dem Token für die spezifische Feedback.
- die Aktion sollte die ‚Feedback‘ Anfrage und ein Formular mit simple_form.
Das ganze ist auf einen Fragebogen zu reagieren ähnlich erzeugt zu aktualisieren sein oder Umfrage (wie Survey Monkey).
Nach ein paar Recherchen glaube ich, dass das Friendly ID Juwel hier nützlich sein kann. Ich habe auch Abschnitt 8 von http://guides.rubyonrails.org/form_helpers.html gelesen und vielleicht muss ich ein authenticity_token im formellen Sinne implementieren. Was ich wirklich suche ist:
- Ist der obige Ansatz der allgemein richtige Weg, dies zu tun?
- Wenn ja, irgendwelche Besonderheiten, wie Sie es implementieren würden (mit oder ohne Friendly ID)?
- Kennen Sie irgendwelche Edelsteine, die existieren, um solche URLs/Tokens zu erzeugen?
Vielen Dank im Voraus. Ich bin auch jetzt den aktuellen Stand der Modell- und Regler Details:
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
Und das ist mein Mailer:
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
Große Antwort, danke David. Arbeitete perfekt für mich. – turkeyman84
ist diese Token-Generation Logik wird einzigartige Token wie Primärschlüssel erhalten? oder es dupliziert das Token? für zB: Sagen Sie es zufällig erzeugt ein Token "123". Gibt es eine Chance, dass es wieder "123" zufällig generiert? – John
@John Abhängig davon, wie viel Verkehr Ihre Website erhält, könnte diese Token-Generierungslogik ein doppeltes Token so oft wie einmal in einer Billiarde Mal generieren. Es wäre viel sicherer, einen eindeutigen Index auf Token zu setzen und 'anzufangen'; self.token = SecureRandom.hex [0,10] .upcase; Rettung ActiveRecord :: RecordNotUnique; wiederholen; Ende –