我开始纳入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
方法在我的模型覆盖轨道,而不是使用uuid
的id
但我不是在那里我可以改变一切在实施,对于每一个模型键和外键的地步。
它是好的搜索和我的控制器这样的力值?它会更好,以在模型在某种程度上验证码? (即模型回调/方法等)
谢谢。
你为什么要生成视图的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"