Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用UUID';rails表单中的_Ruby On Rails_Ruby_Forms_Ruby On Rails 5_Uuid - Fatal编程技术网

Ruby on rails 使用UUID';rails表单中的

Ruby on rails 使用UUID';rails表单中的,ruby-on-rails,ruby,forms,ruby-on-rails-5,uuid,Ruby On Rails,Ruby,Forms,Ruby On Rails 5,Uuid,我开始将UUID作为id模糊处理的一种形式合并到我的rails应用程序中。在创建一个新记录时,我有一个带有隐藏字段的表单,该表单将必要的ID作为关联模型的值传递,但是,我希望将关联记录的UUID作为值传递,而不是实际的ID,这样就不会让任何人看到ID挂在外面来检查HTML 标准轨道形式: <%= form_for(@share_foo) do |f| %> ... <%= f.hidden_field :foo_id, value: @foo.uuid %>

我开始将UUID作为
id
模糊处理的一种形式合并到我的rails应用程序中。在创建一个新记录时,我有一个带有隐藏字段的表单,该表单将必要的ID作为关联模型的值传递,但是,我希望将关联记录的UUID作为值传递,而不是实际的ID,这样就不会让任何人看到ID挂在外面来检查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 %>
我知道我可以在我的模型中使用
to_params
方法来覆盖rails,使用
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
提醒:要使用uuid,您需要将其放入您的
模式。rb

enable_extension "uuid-ossp"

否,每个对象的所有UUID都是在
:创建后的回调中的模型中创建的。我想使用已经生成的UUID(例如用户的UUID)将一条记录与另一条记录关联起来。通常,我通过
隐藏的\u字段
通过表单传递这样的值(即
:user\u id
外键)。好的,只要控制器中已经有UUID(因为您在视图中设置了它),您可以将
@share\u foo.foo\u id=@foo.uuid
@share\u foo.foo\u user\u id=当前用户.uuid
设置在
@share\u foo.save
enable_extension "uuid-ossp"