Hier ist ein Artikel, der tatsächlich beschreibt, wie zu tun, was Sie durch Überschreiben der User.primary_key
Methode wie wollen:
class User
self.primary_key = 'hashed_id'
end
Welche Sie User.find
zu nennen und die „hashed_id“ passieren würde es erlauben:
http://ruby-journal.com/how-to-override-default-primary-key-id-in-rails/
So ist es möglich.
Das sagte, würde ich empfehlen, dagegen zu tun, und stattdessen etwas wie User.find_by_hashed_id
verwenden. Der einzige Unterschied ist, dass diese Methode nil
zurückgibt, wenn ein Ergebnis nicht gefunden wird, anstatt eine ActiveRecord::RecordNotFound
Ausnahme auszulösen. Sie können dies manuell in Ihrem Controller werfen:
def show
@user = User.find_by_hashed_id(hashed_id)
raise ActiveRecord::RecordNotFound.new if @user.nil?
... continue processing ...
end
schließlich eine andere Notiz dies zu erleichtern, auf Sie - Rails hat auch eine Methode, die Sie in Ihrem Modell außer Kraft setzen können, to_param
, ihm zu sagen, welche Eigenschaft zu verwenden beim Generieren von Routen. Standardmäßig verwendet es die ID, aber Sie möchten wahrscheinlich die hashed_id verwenden.
class User
def to_param
self.hashed_id
end
end
nun in Ihrem Controller wird params[:id]
die hashed_id enthalten anstelle der ID.
def show
@user = User.find_by_hashed_id(params[:id])
raise ActiveRecord::RecordNotFound.new if @user.nil?
... continue processing ...
end
Dies ist wahrscheinlich eine wirklich schlechte Idee, es könnte die Dinge intern zu brechen. Warum schreiben Sie nicht Ihre eigene alternative Methode und verwenden Sie diese in Ihren Controllern? 'find_hashed_id' stattdessen. – tadman
Danke für Ihre Eingabe, ich gehe mit find_hashed_id :) – krnflake