首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails自定义路由,如何删除?id=

Rails自定义路由,如何删除?id=
EN

Stack Overflow用户
提问于 2018-10-13 12:02:10
回答 1查看 996关注 0票数 0

我的应用程序有一个带有:name:short_name的msa模型。

在msa索引页上,有一个所有msa.names的下拉菜单,以便用户可以路由到选定的msa的显示页面。

此功能使用collection_select编码,该路由到msa控制器中的自定义方法。

生活津贴指数视图:

代码语言:javascript
复制
<%= form_with url: 'msas/redirect', method: :post, local: true do |f| %>
<%= f.collection_select(:id, Msa.all, :id, :name)%>
  <%= f.submit "Search" %>
<% end %>

msa控制器重定向方法:

代码语言:javascript
复制
 def redirect
    @msa=Msa.find(params[:id])
    redirect_to msa_path(@msa, short_name: @msa.short_name, id: @msa.id)
  end

与其使用读取localhost:3000/msa/1的路由,不如让它们读取localhost:3000/search/:short_name。

我的routes.rb:

代码语言:javascript
复制
  scope format: false do
    resources :msas, :only => [:show], path: '/search', param: :short_name
  end
  resources :msas, :except => [:show]

一切似乎都正常,除了浏览器中的路由如下:

本地主机:3000/search/芝加哥?id=1

我尝试从重定向方法中删除id:@msa.id,但最后出现了以下错误:

代码语言:javascript
复制
Couldn't find Msa without an ID

这是从msa控制器中的set_msa方法中得到的。

我想知道两件事:( a)我是否偏离了典型的rails惯例;( b)是否有办法做到这一点,而不向世界展示我的msa模型的id#?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-13 12:29:27

如果有办法做到这一点,而不向世界展示我的msa模型的id#呢?

只需从路径助手中删除id即可。

代码语言:javascript
复制
redirect_to msa_path(@msa, short_name: @msa.short_name)

并通过定义一个新方法并删除show方法在set_msa中的条目来消除错误,如下所示

代码语言:javascript
复制
before_action :set_custom_msa, only: [:show]
before_action :set_msa, only: [:edit, :update,..] #remove the entry for show

private
def set_custom_msa
  @msa = Msa.find_by(short_name: params[:short_name])
end

我是不是偏离了典型的铁路惯例?

不是的!但是,如果您的最终目标是将:id隐藏在URL中并使用户友好的URL,那么我建议您查看friendly

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52792712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档