Я начинаю включать UUID как форму обфускации id
в мое приложение rails.После создания новой записи у меня есть форма со скрытыми полями, передающими необходимые идентификаторы в качестве значений для связанных моделей, однако я хотел бы передать UUID связанной записи в качестве значения вместо фактического идентификатора, чтобы идентификатор неНикто не может проверить HTML.
Стандартная форма направляющих:
<%= form_for(@share_foo) do |f| %>
...
<%= f.hidden_field :foo_id, value: @foo.uuid %>
<%= f.hidden_field :foo_user_id, value: current_user.uuid %>
...
<% end %>
Действие контроллера:
def create
...
@share_foo.foo_id = Foo.where(uuid: params[:share_foo][:foo_id]).pluck(:id).join("")
@share_foo.foo_user_id = User.where(uuid: params[:share_foo][:foo_user_id]).pluck(:id).join("")
if @share_foo.save
flash.now[:success] = "Foo successfully shared to #{@share_foo.shared_to}!"
else
flash.now[:danger] = @share_foo.errors.full_messages.join(", ")
end
...
end
Я знаю, что могуиспользуйте метод to_params
в моих моделях, чтобы переопределить рельсы, чтобы использовать uuid
вместо id
, но я не в том состоянии, чтобы изменить все для реализации этого для каждой модели и внешних ключей.
Это нормально для поиска и принудительной установки значений в моем контроллере?Было бы лучше иметь этот код в модели как-нибудь?(т.е. обратные вызовы / методы модели и т. д.)
Спасибо.