【问题标题】:Custom Rails route after object creation对象创建后的自定义 Rails 路由
【发布时间】:2016-03-18 18:29:51
【问题描述】:

更新:代替

@company = Company.find(params[:company_id] 中的Reimbursements New Action

我用@company = Company.find_by_name(params[:company_id]

这将 URL 中的 id 替换为 name,但仍需要在 URL 末尾添加 /reimbursements/new。有什么想法吗?

概述:我有一个Companies 控制器/模型和一个Reimbursements 控制器/模型

Company has_many reimbursements

Company 也有 name

问题: 创建新公司时,新reimbursements 表单的链接是

localhost:3000/companies/:id/reimbursements/new

这个网址很长,我希望它是:

localhost:3000/companies/company.name

这可能吗?我该怎么做呢?提前致谢!

【问题讨论】:

  • 你可以使用任何你想要的东西。路由只是正则表达式。然而,真正的问题是这是否是一个好主意。短网址是一种营销时尚。
  • 你能看看我发布的更新吗?我将不胜感激任何见解

标签: ruby-on-rails ruby ruby-on-rails-4 routes custom-routes


【解决方案1】:

您可能希望在公司模型中添加一个永久链接字段。

然后使用路由作为

localhost:3000/companies/:permalink/reimbursements/new

现在在控制器中,找到 Company 是 permalink 而不是 id Id。

【讨论】:

    【解决方案2】:

    我认为是

    get /companies/:name => reimbursements#new

    Rails 默认将到某个控制器操作的路由作为它看到的到该操作的第一条路由,因此请确保将其放在任何可能覆盖它的路由之上(即您可能拥有的任何报销路由)。正如 Max 所建议的那样,这不是很好的形式,并且公司 id 不会通过这种结构的参数传递

    【讨论】:

    • 你的方法对我不起作用。你能看看我发布的更新吗?
    • 没有用怎么办? Company.find_by_name(params[:company_id]) 也确实有效吗?看起来您是在告诉 AR 按名称搜索某物并为其指定 ID
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多