使用UUID在导轨形式

问题描述 投票:-2回答:1

我开始纳入UUID的作为id混淆的形式进入我的Rails应用程序。在创建一个新的记录我有一个隐藏字段在必要的ID的传球为值的关联模型,但是一个形式,我想通过相关记录的UUID作为值而不是实际的ID,这样的方式ID ISN “T挂在众目睽睽下,任何人检查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方法在我的模型覆盖轨道,而不是使用uuidid但我不是在那里我可以改变一切在实施,对于每一个模型键和外键的地步。

它是好的搜索和我的控制器这样的力值?它会更好,以在模型在某种程度上验证码? (即模型回调/方法等)

谢谢。

ruby-on-rails ruby forms ruby-on-rails-5 uuid
1个回答
0
投票

你为什么要生成视图的uuid?像控制器创建

def create
  ...
  @share_foo.id = uuid_generate_v4()
  @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

提醒:使用你需要把这个在您的schema.rb的uuid:

enable_extension "uuid-ossp"
© www.soinside.com 2019 - 2024. All rights reserved.