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中的id12
查找您的内容,它就会显示在浏览器栏中。“隐藏”它的唯一方法(但它一点也不安全,因为它很容易被发现),就是将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 %>