Ruby on rails 如何在rails 3中定义自定义嵌套路径
我有一个名为Ruby on rails 如何在rails 3中定义自定义嵌套路径,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个名为client的模型和另一个名为client\u preference的模型。它们之间的关系是一个客户端具有许多客户端首选项。 现在我想创建更新和删除客户端首选项的方法。为此,我将生成以下路径: map.resources :clients do |client| client.resources :client_preferences, only: [:edit, :update, :destroy] end 我得到了以下命名路线: edit_client_client_pre
client
的模型和另一个名为client\u preference
的模型。它们之间的关系是一个客户端
具有许多客户端首选项
。
现在我想创建更新和删除客户端首选项的方法。为此,我将生成以下路径:
map.resources :clients do |client|
client.resources :client_preferences, only: [:edit, :update, :destroy]
end
我得到了以下命名路线:
edit_client_client_preference GET /clients/:client_id/client_preferences/:id/edit(.:format) {:controller=>"client_preferences", :action=>"edit"}
client_client_preference PUT /clients/:client_id/client_preferences/:id(.:format) {:controller=>"client_preferences", :action=>"update"}
DELETE /clients/:client_id/client_preferences/:id(.:format) {:controller=>"client_preferences", :action=>"destroy"}
现在,我想定制路由名称,从client\u client\u preference
到client\u preference
,同样地,对于生成的其他路由,这样客户端在生成的路径名称中不会重复两次。有没有办法做到这一点,或者我需要手动定义路线?
任何帮助或指针都将非常有用。使用:as
选项应允许创建更干净的命名帮助程序:
map.resources :clients do |client|
client.resources :client_preferences, only: [:edit, :update, :destroy], as: 'preference'
end
现在应该映射到客户首选项
希望有帮助 有一个关键字:as
,它可以帮助您在Rails中创建自定义的路径名。
这个问题也有现成的答案:是的,这是有效的,但只是部分有效。它仅将/clients/:client\u id/client\u preferences/:id/edit
更新为/clients/:client\u id/preferences/:id/edit
。但是我还希望生成的助手路由名称edit\u client\u preference
也转换为edit\u client\u preference
。这很有趣。:as
选项用于修改辅助路线名称。:path
选项用于更改URL中的实际路径。我不知道你为什么会得到这个结果。是因为,客户端
和客户端首选项
之间在模型级别没有定义明确的所属
关系,但我们只是将它们用作一对多
,用于我们的目的吗?如果你正在创建一对多关联,客户端模型应该声明了多个
,客户端首选项模型也应该声明了属于
。此外,如果您使用的是Ruby 1.8及以下版本,则更新上述代码以使用哈希火箭语法(即:only=>[:edit],:as=>'preference'
)可能值得一试。是的,这就是以这种方式设计的模型。现在我想了解一下有很多
和属于它们之间的关系。我知道这不是一个好的设计,不这样做的模型水平。但这就是它的编写方式,实际上这两个表位于不同的数据库中,通过client\u id
连接。