Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 创建不包含';t显示:id_Ruby On Rails - Fatal编程技术网

Ruby on rails 创建不包含';t显示:id

Ruby on rails 创建不包含';t显示:id,ruby-on-rails,Ruby On Rails,我正在努力清理我的路线。我有一个可以登录和创建应用程序的公司模型。它们可以创建多个 目前这是我的设置: 路线 get 'applications/edit/:id', to: 'applications#edit' 应用程序\u控制器 def edit @application = current_company.applications.find(params[:id]) end def update @application = Application.find(params[:i

我正在努力清理我的路线。我有一个可以登录和创建应用程序的公司模型。它们可以创建多个

目前这是我的设置:

路线

get 'applications/edit/:id', to: 'applications#edit'
应用程序\u控制器

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

您的活动应用程序

| 

现在一切都好了,如果我去编辑应用程序/11 f.ex,我会看到它

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


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

如果要删除
:id
,仍然需要找到所需数据的方法

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

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

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

关于蛞蝓的进一步阅读:


我不明白。您希望参数不在url中吗?我希望将其更改为,而不是此/edit/12(其中12是当前ID f.ex),它只显示/edit,并从@applications.all.eachtry:
get'applications/edit/:ID'中的链接获取ID,改为:'applications#edit'as::edit_app
<% @applications.all.each do |f| %>
 <%= link_to "Application",   show_path + "/#{f.id}" %> | <%= link_to "Edit", edit_application_path("#{f.id}") %>
   <br>
<% end %>