如何在 rails url 中隐藏 :id?
How to hide :id in rails url?
我有这些嵌套路由,我想从 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
,在顶部看起来像这样:
<%= form_for [@object, @trade_wizard], as: :trade_wizard, url: validate_step_share_wizard_path(@object) do |f| %>
因此用户将 first_object
添加到向导,并被重定向到以下 url:/shares/113/trade/second_object
。添加 second_object
后(这与第一个明显不同),用户被重定向到 /shares/106/trade/confirmation
。我不确定这是否代表潜在的安全违规行为,而且我的测试似乎工作正常,所以我认为如果我找到某种方法来隐藏 url 的 id 部分应该没问题?
或者我的嵌套路由用例不正确?
gem 'friendly_id'
让您可以创建漂亮的 URL 并使用人性化的字符串,就像它们是数字 ID 一样。
您有一组可能的解决方案:
如前所述,您可以将 ID 转换为 slug 之类的东西,这就是另一个答案提到的:https://github.com/norman/friendly_id
您可以将所选对象的 ID 存储在会话 cookie 中。这样,客户端仍然在发送相关数据,但它并没有真正出现在 URL.
你可以有一个临时的 Transaction
table,你可以在其中存储第一个对象和第二个对象。这样,路由将处理 transaction_id,而 first_object_id 和 second_object_id 将在 table 中抽象出来。这也将允许您存储与交易或交易过程相关的其他元数据。
您可以创建一个不与 shares
控制器链接的单独端点,您可以在其中接受两个(可选)查询参数:/sharetransaction/trade?first_object_id=113&second_object_id=106
。这样,URL 反映了实际发生的情况,而不是无缘无故地在中间更改 ID。
您采用的方法取决于您的用例。
我有这些嵌套路由,我想从 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
,在顶部看起来像这样:
<%= form_for [@object, @trade_wizard], as: :trade_wizard, url: validate_step_share_wizard_path(@object) do |f| %>
因此用户将 first_object
添加到向导,并被重定向到以下 url:/shares/113/trade/second_object
。添加 second_object
后(这与第一个明显不同),用户被重定向到 /shares/106/trade/confirmation
。我不确定这是否代表潜在的安全违规行为,而且我的测试似乎工作正常,所以我认为如果我找到某种方法来隐藏 url 的 id 部分应该没问题?
或者我的嵌套路由用例不正确?
gem 'friendly_id'
让您可以创建漂亮的 URL 并使用人性化的字符串,就像它们是数字 ID 一样。
您有一组可能的解决方案:
如前所述,您可以将 ID 转换为 slug 之类的东西,这就是另一个答案提到的:https://github.com/norman/friendly_id
您可以将所选对象的 ID 存储在会话 cookie 中。这样,客户端仍然在发送相关数据,但它并没有真正出现在 URL.
你可以有一个临时的
Transaction
table,你可以在其中存储第一个对象和第二个对象。这样,路由将处理 transaction_id,而 first_object_id 和 second_object_id 将在 table 中抽象出来。这也将允许您存储与交易或交易过程相关的其他元数据。您可以创建一个不与
shares
控制器链接的单独端点,您可以在其中接受两个(可选)查询参数:/sharetransaction/trade?first_object_id=113&second_object_id=106
。这样,URL 反映了实际发生的情况,而不是无缘无故地在中间更改 ID。
您采用的方法取决于您的用例。