创建编辑URL路由,不显示:id

17 浏览
0 Comments

创建编辑URL路由,不显示:id

我正在努力整理我的路由。我有一个可以登录并创建应用程序的公司模型。他们可以创建多个应用程序。

目前这是我的设置:

路由

get 'applications/edit/:id', to: 'applications#edit'

Applications_controller

def edit
 @application = current_company.applications.find(params[:id])
end 
def update
 @application = Application.find(params[:id])
 if @application.update(application_params)
  redirect_to dashboard_path
 else
  render 'edit'
 end
end

每个公司都有自己的仪表板。这是我从/dashboard获取的代码

您的活动应用程序

<% @applications.all.each do |f| %>
 <%= link_to "Application",   show_path + "/#{f.id}" %> | <%= link_to "Edit", edit_application_path("#{f.id}") %>
   
<% end %>

现在,如果我去编辑_application/11,我会看到它。

我想要更改的是从URL中删除:id。

这样可以增加安全性并提供更好的体验。现在,我花了5分钟才意识到我可以改变:id的url并编辑所有内容。因此,我添加了current_company.applications来阻止这种情况发生。然而,我觉得这不是很安全。

0
0 Comments

问题的出现原因是想要在URL路由中隐藏:id参数,但仍然需要一种方法来找到所需的数据。只要使用类似/edit/12这样的URL,并且在GET请求的URL中使用id参数来查找内容,它就会显示在浏览器栏中。唯一的“隐藏”方式(但实际上并不安全,因为很容易被发现)是使用包含id参数的隐藏字段的POST请求(可以使用JavaScript创建)。

解决方法是使用slug。为每个内容创建一个唯一的键,例如,如果标题是“My great app”,则slug将是my-great-app。因此,URL中没有id参数(如果始终使用slug作为参考,它无法被发现)。优点是仍然可以快速匹配所搜索的内容(在slug上创建唯一索引)。

关于slug的进一步阅读:

- http://rubysnippets.com/2013/02/04/rails-seo-pretty-urls-in-rails/

- https://stackoverflow.com/questions/4230846

0