gpt4 book ai didi

ruby-on-rails - 如何在 Rails 的 map.resources() 中重命名默认标识符参数 "id"?

转载 作者:行者123 更新时间:2023-12-04 00:24:34 25 4
gpt4 key购买 nike

我喜欢 Rail 生成的所有默认路线 map 资源 .但是,在某些情况下,我想在我的 route 使用非数字标识符。例如,如果有一个由用户和他们的文章组成的嵌套路由,标准路由可以写成这样:

map.resources :users, :has_many => [:articles] # => e.g. '/users/:id/articles/:id'

但是,不使用 Rails 生成的默认数字标识符有很多优点/原因。有没有办法将默认的 :id params 替换为我选择的另一个规范标识符,而无需为每个标准操作编写自定义路由?假设我想要以下格式的路线:
'/users/:login/articles/:id'

使用 是否可以实现这种路线? map 资源 ?

最佳答案

从 Rails 2.3 开始,无法更改参数名称并仍然使用 #resources 的自动路由。提供。

作为解决方法,您可以映射 articles:path_prefix:name_prefix :

map.resources :articles, :path_prefix => "/users/:login",
:name_prefix => "user_"
:path_prefix影响 URL,和 :name_prefix影响生成的命名路由,所以你最终会得到这些路由:
    user_articles GET    /users/:login/articles(.:format)          {:controller=>"articles", :action=>"index"}
POST /users/:login/articles(.:format) {:controller=>"articles", :action=>"create"}
new_user_article GET /users/:login/articles/new(.:format) {:controller=>"articles", :action=>"new"}
edit_user_article GET /users/:login/articles/:id/edit(.:format) {:controller=>"articles", :action=>"edit"}
user_article GET /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"show"}
PUT /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"update"}
DELETE /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"destroy"}

不过,作为一般的经验法则,我会坚持 Rails 默认约定 :user_id ,以及您在问题中发布的路由。一般理解为 :id:user_id不一定意味着“数字标识符”——它们意味着“资源标识符”,无论它是什么。通过坚持默认约定,任何在 Rails 中使用过资源路由的人都会更容易理解您的代码。

要为资源使用非数字标识符,只需重新定义 #to_param在你的模型中。然后,确保在您的 Controller 中使用一个通过这个标识符(而不是数字 ID)来查找的查找器,例如 User#find_by_login! .

关于ruby-on-rails - 如何在 Rails 的 map.resources() 中重命名默认标识符参数 "id"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/810385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com