Я хотел бы иметь возможность скрыть идентификаторы объектов в моем приложении, чтобы URL можно было поделиться, но не так легко угадать.
Я понял, что мне нужно сохранить hashed_id
в базе данных для объекта, и что может быть возможность переписать функцию to_param
для использования этого hashed_id
в URL, но яУ меня проблемы с получением его на работу.
модель:
after_create :create_hashed_id
def to_param
self.hashed_id
end
def create_hashed_id
self.update_attributes(:hashed_id => Digest::SHA1.hexdigest([Time.now, rand].join)[0,16])
end
контроллер:
def show
@upload = Upload.find_by_hashed_id(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @upload }
end
end
Объект создается с атрибутом hash_id, но когда я пытаюсь ивызовите метод show, который выглядит так, как будто он выглядит в столбце id
вместо столбца hashed_id
.