Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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/25.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 如何在rails url中隐藏:id?_Ruby On Rails_Ruby_Rails Routing - Fatal编程技术网

Ruby on rails 如何在rails url中隐藏:id?

Ruby on rails 如何在rails url中隐藏:id?,ruby-on-rails,ruby,rails-routing,Ruby On Rails,Ruby,Rails Routing,我有这些嵌套的路由,我想从url中隐藏id参数 resources :shares, only: [:index, :create, :update] do resource :wizard, path: "trade" do get :first_object get :second_object get :confirmation post :validate_step end end 每一页都有一个表单_,其顶部如下所示: <%= form

我有这些嵌套的路由,我想从url中隐藏id参数

resources :shares, only: [:index, :create, :update] do 
  resource :wizard, path: "trade" do
    get :first_object
    get :second_object
    get :confirmation
    post :validate_step
  end
end
每一页都有一个表单_,其顶部如下所示:

<%= form_for [@object, @trade_wizard], as: :trade_wizard, url: validate_step_share_wizard_path(@object) do |f| %>
因此,用户将第一个_对象添加到向导中,并被重定向到以下url:/shares/113/trade/second_对象。添加明显不同于第一个的第二个_对象后,用户被重定向到/shares/106/trade/confirmation。我不确定这是否代表了潜在的安全违规,我的测试似乎工作得很好,所以我认为如果我找到某种方法隐藏url的id部分,应该可以吗

还是我的嵌套路由用例不正确?

gem“friendly\u id”允许您创建漂亮的URL,并像处理数字id一样处理人性化字符串


您有一套可能的解决方案:

如前所述,您可以将ID转换为类似于slug或其他的东西,这就是另一个答案所提到的:

您可以将选定对象的ID存储在会话cookie中。这样,客户机仍在发送相关数据,但它并没有真正出现在URL中

您可以有一个临时事务表,可以在其中存储第一个对象和第二个对象。这样,路由将处理事务标识,而第一个对象标识和第二个对象标识被抽象到表中。这还允许您存储与交易或交易流程相关的其他元数据

您可以创建一个不与shares controller链接的单独端点,在这里您可以接受两个可选的查询参数:/sharetransaction/trade?first_object_id=113和second_object_id=106。这样,URL反映了实际发生的事情,而不是改变中间的ID,因为没有明显的原因。
您选择的方法取决于您的用例。

试试这个。谢谢!事实上,我没有考虑这一部分,因为这感觉是无关的,但我实际上是将相关ID存储在会话变量中。整个过程是在一个多步骤表单向导中构建的,只有在成功添加所有内容之后,才会传播到db。我仍然对如何从url中隐藏ID感到困惑。我不需要在表格中传递身份证吗?我还是有点困惑。第一个对象和第二个对象都是由用户从相似对象列表中选择的,如果不将它们作为参数传递给会话,我将无法将它们传递给会话以形成。如何在控制器中分配它们?