创建对象后自定义Rails路由

时间:2016-03-18 18:29:51

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

更新:而不是

@company = Company.find(params[:company_id]

中的

Reimbursements New Action

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

这会将网址中的id替换为name,但仍需要网址末尾的/reimbursements/new。有什么想法吗?

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

A Company has_many reimbursements

Company也有name

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

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

此网址很长,我希望它是:

localhost:3000/companies/company.name

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

2 个答案:

答案 0 :(得分:0)

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

然后使用路线

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

现在在控制器中,找到公司永久链接而不是ID。

答案 1 :(得分:0)

我认为会是

get /companies/:name => reimbursements#new

Rails默认使路由到某个控制器操作是它看到的那个操作的第一个路由,因此请确保将其置于可能覆盖它的任何路由之上(即您可能拥有的任何报销路由)。正如马克斯所建议的那样,这不是一个很好的形式,公司的身份不会通过具有这种结构的参数传递