Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rails 3中定义自定义嵌套路径_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

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
连接。