【问题标题】:create edit URL route that doesn't show :id创建不显示的编辑 URL 路由:id
【发布时间】:2014-08-16 00:09:38
【问题描述】:

我正在尝试清理我的路由。我有一个可以登录和创建应用程序的公司模型。他们可以创建几个。

目前这是我的设置:

路线

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}") %>
   <br>
<% end %>

现在这一切正常,如果我去 edit_application/11 f.ex 我会看到它。

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

从而使其更安全并给人一种更好的感觉。现在我花了 5 分钟才意识到我可以更改 :id url 并编辑所有内容。因此,我添加了 current_company.applications 来阻止它。然而我觉得这不是很安全。

【问题讨论】:

  • 我不明白。您希望参数不在 url 中?
  • 我想更改它,而不是这个 /edit/12 (其中 12 是当前 ID f.ex),它只是说 /edit 并从 @applications 中的链接获取 ID .all.each
  • 试试:get 'applications/edit/:id', to: 'applications#edit' as: :edit_app

标签: ruby-on-rails


【解决方案1】:

如果你想删除:id,你仍然需要一种方法来找到你想要的数据。

只要你有 url /edit/12 并且只要你在GET url 中使用 id 12 来查找你的内容,它就会显示在浏览器栏中。 “隐藏”它的唯一方法(但它根本不安全,因为它很容易被发现)是使用带有 id 隐藏字段的表单使用 POST 请求(可以用 JavaScript )。 您要求应用程序从 @applications.all.each 中的链接获取 id,但它可以做到这一点的唯一方法是将其包含在请求中的某个位置(无论是 GET、POST、COOKIES/SESSION ......)。

对于另一个(可能更好的)解决方案,请继续阅读。

一个非常常见的做法是使用slugs:为每个内容创建一个唯一的键,例如,如果您的标题是“我的伟大应用”,则 slug 将是my-great-app。因此,您的 URL 中没有 id(如果您总是使用 slug 作为参考,则无法找到它)。这样做的好处是您仍然可以快速找到您正在搜索的内容(在 slugs 上创建唯一索引)。

一些关于蛞蝓的进一步阅读:

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

What is the etymology of 'slug'?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2015-03-01
    • 2017-02-03
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多